[英]Recycler View cannot refresh the cards
我正在使用recyclerview
和cardview
來顯示詳細信息,但是當我從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.