当数据更改或在SQLITE Android片段中更改或删除时,如何刷新回收



我在sqlite android中存储标题,缩略图,id,并在recyclerview中显示。我创建了所有方法,即在我的sqlite助手类中获取数据,添加,删除和更新,并在我的片段Android中调用这些方法。

,但是问题是当我删除或添加项目中的sqlite时,它没有令人耳目一新。是的,我在片段类中定义了adapter.notifydatasetChanged()

示例:

这是我的sqlite openhelper类:

  1. public List<dataModel> getDatabase();
  2. public void addData(dataModel data);
  3. public void deleteData(dataModel data);

我在片段中调用这些方法,我正在分配 getDatabase()列在片段中。

预先感谢。编辑1:

public class LightFragment extends Fragment {
RecyclerView mRecyclerView;
FloatingActionButton addLightTitle,allLightsOff;
ArrayList<LightTitle> lightTitle;
RecyclerView.LayoutManager mLayoutManager;
EditText edxLightName;
Button btnLightName;
SQLiteDatabase  db;
LDbHelper lHelper;
ArrayList<LightPojo> mLightPojos = new ArrayList<>();
LightRecyclerView li;

@SuppressLint("ValidFragment")
public LightFragment(Context mContext) {
    lHelper = new LDbHelper(mContext);
}
public LightFragment() {
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_light, container, false);
}
@Override
public void onPause() {
    super.onPause();
    mLightPojos = lHelper.getLightData();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mRecyclerView = view.findViewById(R.id.light_frag);
    addLightTitle = view.findViewById(R.id.fab_add_light_title);
    allLightsOff = view.findViewById(R.id.fab_off_all_lights);
    mLayoutManager = new LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL,false);
    mLightPojos = lHelper.getLightData();
           li = new LightRecyclerView(getContext(),mLightPojos);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(li);
    li.notifyDataSetChanged();
    mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(),mRecyclerView,new ClickListener(){
        @Override
        public void onClick(View view, int position) {
            Log.d("BT","clicked" + mLightPojos.get(position).getName());
            //toast("clicked" + position );
            if (!mLightPojos.get(position).isClicked()){
                ImageView lightPopUp = view.findViewById(R.id.row_light_thumbnail);
                lightPopUp.setImageResource(R.drawable.light_on);
                //DrawableCompat.setTint(lightPopUp.getDrawable().mutate(), ContextCompat.getColor(getContext(), R.color.white));
                toast(mLightPojos.get(position).getName() + "light on");
                Log.d("BT","clicked" + mLightPojos.get(position).isClicked());
                //mLightPojos.get(position).setClicked(true);
                LightPojo pojo = new LightPojo(mLightPojos.get(position).getId(),R.drawable.light_on,true);
                lHelper.upDateState(pojo);
            }else {
                ImageView lightPopUp = view.findViewById(R.id.row_light_thumbnail);
                toast(mLightPojos.get(position).getName() + "light off");
                lightPopUp.setImageResource(R.drawable.light_off);
                //DrawableCompat.setTint(lightPopUp.getDrawable().mutate(), ContextCompat.getColor(getContext(), R.color.colorAccent));
                Log.d("BT","clicked" + mLightPojos.get(position).isClicked());
                //mLightPojos.get(position).setClicked(false);
                //lHelper.upDateState(position,R.drawable.light_off,false);
                LightPojo pojo = new LightPojo(mLightPojos.get(position).getId(),R.drawable.light_off,false);
                lHelper.upDateState(pojo);
            }

        }
        @Override
        public void onLongClick(View view, final int position) {
            toast("long pressed at " + position);
            final Dialog eDialog = new Dialog(getActivity());
            eDialog.setContentView(R.layout.edit_light_name);
            //EditText editLightName = eDialog.findViewById(R.id.edit_light_name_edx);
            //final String editedLightName = editLightName.getText().toString();
            Button deleteLightName = eDialog.findViewById(R.id.btn_delete_light_name);
            Button updateLightName = eDialog.findViewById(R.id.btn_update_light_name);
            eDialog.show();
           // eDialog.setTitle("Edit light name");

            updateLightName.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //lightTitle.set(position,editLightName.getText().toString());
                    //Log.d("BT",editedLightName);
                    EditText editLightName = eDialog.findViewById(R.id.edit_light_name_edx);
                    //lightTitle.set(position,new LightTitle(editLightName.getText().toString(),false));
                    LightPojo pojo = new LightPojo(mLightPojos.get(position).getId(),editLightName.getText().toString());
                    lHelper.editName(pojo);
                    lHelper.getLightData();
                    li.notifyDataSetChanged();
                    eDialog.dismiss();
                }
            });
            deleteLightName.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //lightTitle.remove(position);
                    LightPojo pojo = new LightPojo(mLightPojos.get(position).getId());
                    lHelper.delete(pojo);
                    li.notifyItemChanged(position);
                    //li.notifyDataSetChanged();
                    eDialog.dismiss();
                }
            });

        }
    }));
    addLightTitle.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //toast("clicked fab button");
            //LightTitleDialog titleDialog = new LightTitleDialog();
            //titleDialog.show(getActivity().getFragmentManager(),"title");
            final Dialog mDialog = new Dialog(getActivity());
            mDialog.setTitle("Add light name");
            mDialog.setContentView(R.layout.add_light_title);
            edxLightName = mDialog.findViewById(R.id.edt_light_title);
            btnLightName = mDialog.findViewById(R.id.btn_add_title);
            mDialog.show();
            btnLightName.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //toast("Add light");
                    if (edxLightName.getText().length() != 0){
                        String newLightName = edxLightName.getText().toString();
                        //lightTitle.add(new LightTitle(newLightName,false));
                        //add(newLightName,R.id.utilities_thumbnail,false);
                        lHelper.insertData(newLightName,R.drawable.light_off,false);
                        li.notifyDataSetChanged();
                        mDialog.dismiss();
                    }else {
                        toast("Please enter light name");
                    }
                }
            });

        }
    });

在更新数据模型后,请通过片段或活动(无论您使用什么(调用adapter.notifydatasetChanged()。然后,RecyClerview将被更新。

更新数据模型后,请致电以下方法。

 adapter.notifyItemRemoved(position);

这将更新有关从列表中删除元素的适配器。

是的,我发现我必须在单击时明确更改arraylist。除了数据库更新。

将值更新为内部更新值的SQLite调用适配器方法。您无需每次更新数据时都能获取SQLite数据。

最新更新