簡體   English   中英

Recycler View無法刷新卡

[英]Recycler View cannot refresh the cards

我正在使用recyclerviewcardview來顯示詳細信息,但是當我從sqlite刪除特定行時,它仍保留在視圖中,我現在不應該在哪里刪除或刪除視圖后重新刷新recyclerview代碼(如果我嘗試添加新細節)即卡它不會顯示在視圖中。

而且,我在滾動時嘗試實現radiobutton ,從而更改了停止方式。

我是Android和recyclerview新手,所以我不知道在哪里實現諸如notifyDataSetChanged()invalidate()代碼,因此您可以幫我解決上述問題。

MyAdapter類

  public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {


static   List<EmployeeDetails> dbList;
static  Context context;
MyAdapter(Context context, List<EmployeeDetails> dbList ){
    this.dbList = new ArrayList<EmployeeDetails>();
    this.context = context;
    this.dbList = dbList;


}


@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
            R.layout.card_item, null);

    // create ViewHolder

    ViewHolder viewHolder = new ViewHolder(itemLayoutView);
    return viewHolder;


}

@Override
public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {

    holder.name.setText(dbList.get(position).getName1());
    holder.phone.setText(dbList.get(position).getPhone1());


}

@Override
public int getItemCount() {
    return dbList.size();
}

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView name,phone;
    public ImageView i,edit,delete;
   // public RadioButton p,a,l;


     DatabaseHelper helper=new DatabaseHelper(MyAdapter.context);


    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);


        i=(ImageView)itemLayoutView.findViewById(R.id.empimage);
        name = (TextView) itemLayoutView
                .findViewById(R.id.rvname);
        phone = (TextView)itemLayoutView.findViewById(R.id.rvphone);

        edit=(ImageView)itemLayoutView.findViewById(R.id.edit);
        delete=(ImageView)itemLayoutView.findViewById(R.id.delete);

       /* p=(RadioButton)itemLayoutView.findViewById(R.id.Present);
        a=(RadioButton)itemLayoutView.findViewById(R.id.Absent);
        l=(RadioButton)itemLayoutView.findViewById(R.id.Leave);
  */


        itemLayoutView.setOnClickListener(this);
        delete.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v)
                    {

                        String s=name.getText().toString();
                        EmployeeDetails e=new EmployeeDetails();

                        helper.deleteARow(s);



                    }
                }



        );


    }




    @Override
    public void onClick(View v) {

    }

實現了Recyclerview

 public class Employees extends Fragment implements View.OnClickListener {
DatabaseHelper helpher;
List<EmployeeDetails> dbList;
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;


public Employees() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.employees, container, false);

    FloatingActionButton fab= (FloatingActionButton) rootView.findViewById(R.id.fab);

    fab.setOnClickListener(this);




   //Recycle

    helpher=new DatabaseHelper(getActivity());

    dbList= new ArrayList<EmployeeDetails>();
    dbList = helpher.getDataFromDB();


    mRecyclerView = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
    mRecyclerView.setHasFixedSize(true);

    // use a linear layout manager
   mLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mLayoutManager);

    // specify an adapter
    mAdapter = new MyAdapter(getActivity(),dbList);
    mRecyclerView.setAdapter(mAdapter);
  //  mAdapter.notifyDataSetChanged();
   // mRecyclerView.invalidate();
    return rootView;

}



@Override
public void onClick(View view) {
    Intent intent=new Intent(getActivity(),addemployee.class);
    startActivity(intent);
}

幫我解決這個問題,我在互聯網上搜索了很多,但找不到合適的方法

編輯

我的數據庫代碼來檢索數據

           public List<EmployeeDetails> getDataFromDB(){
    List<EmployeeDetails> modelList = new ArrayList<EmployeeDetails>();
    String query = "select name,phone_no from "+TABLE_NAME1;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(query,null);

    if (cursor.moveToFirst()){
        do {
            EmployeeDetails model = new EmployeeDetails();
            model.setName1(cursor.getString(0));
            model.setPhone1(cursor.getString(1));
           // model.setRoll(cursor.getString(2));
            //model.setAddress(cursor.getString(3));
            //model.setBranch(cursor.getString(4));

            modelList.add(model);
        }while (cursor.moveToNext());
    }

看起來您想在單擊刪除圖像后刪除該行。

好的,所以調用notifyItemRemoved(position); 內部delete.setOnClickListene(.....)。

並確保您的delete操作從dbList實例中刪除了該條目,否則在刷新后(當您重新運行activity或scroll時)可見刪除的行

如果您的函數helper.deleteARow(s); 刷新dbList然后調用notifyItemRemoved(position); 就在helper.deleteARow(s); 在delete.setOnClickListene(.....)中的一行。

新代碼:

 delete.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {

                    String s=name.getText().toString();
                    EmployeeDetails e=new EmployeeDetails();

                    helper.deleteARow(s);

                   notifyItemRemoved(position);`

                }
            }



    );

您也可以調用notifyDataSetChanged(),但是它將刷新所有不必要的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM