我正在使用recyclerView并从数据库加载数据.recyclelerView项目有2个按钮。对于以下代码,recyclerView加载正常并且点击工作正常。
allData=db.getCatData(CATEGORYLIST_CIDD,1);
textlistadapter = new TextListAdapter(getActivity(), allData);
recyclerView.setAdapter(textlistadapter);
稍后我会重新排列适配器数据,以便使用此代码以降序显示数据
db=new DatabaseHandler(getActivity().getApplicationContext());
allData=db.getCatData(CATEGORYLIST_CIDD,order_id);
textlistadapter = new TextListAdapter(getActivity(), allData);
recyclerView.setAdapter(textlistadapter);
textlistadapter.notifyDataSetChanged();
现在这些项目在recyclerView上重新排列,但onShareButtonClickListener返回null,这是适配器的代码。
private OnShareButtonClickListener onShareButtonClickListener;
public interface OnShareButtonClickListener {
void onItemClick(View view, Pojo obj, int position);
}
public void setOnShareButtonClickListener(final OnShareButtonClickListener onShareButtonClickListener) {
this.onShareButtonClickListener = onShareButtonClickListener;
}
点击监听器代码在这里
holder.bt_share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Snackbar.make(view, "Share Clicked", Snackbar.LENGTH_SHORT).show();
if (onShareButtonClickListener != null) {
onShareButtonClickListener.onItemClick(view, c, position);
}
}
});
由于onShareButtonClickListener为空,因此点击不起作用。
相同的代码第一次运行良好,一旦我更改了订单,那么点击事件就不起作用,所有其他功能都运行良好。
答案 0 :(得分:2)
你应该只需要这样做一次:
textlistadapter = new TextListAdapter(getActivity(), allData);
recyclerView.setAdapter(textlistadapter);
稍后,如果您想更新/更改数据,那么您应该执行以下操作:
textlistadapter.setListItems(allData);
textlistadapter.notifyDataSetChanged();
其中setListItems()
是适配器中的公共方法,例如:
public void setListItems(List<> allData) {
this.data.clear();
this.data.addAll(allData);
}
答案 1 :(得分:0)
很容易理解你做错了什么。您填充一个数组,该数组将为您的适配器提供数据,这意味着,在设置适配器后,如果您希望更改数据,您只需要更改填充数据的数组,并通知适配器数据更改
例如:
myData = db.getData();
myAdapter = new MyAdapter(this,myData);
recyvlerview.setAdapter(myAdapter);
现在每次要更改数据时,只需要更改myData和notifity适配器
myAdapter.notifyDataSetChange();
基本上不是这样做的:
db=new DatabaseHandler(getActivity().getApplicationContext());
allData=db.getCatData(CATEGORYLIST_CIDD,order_id);
textlistadapter = new TextListAdapter(getActivity(), allData);
recyclerView.setAdapter(textlistadapter);
textlistadapter.notifyDataSetChanged();
这应该足够了
db=new DatabaseHandler(getActivity().getApplicationContext());
allData=db.getCatData(CATEGORYLIST_CIDD,order_id);
textlistadapter.notifyDataSetChanged();