[英]Update ArrayList for RecyclerView.Adapter from RecyclerView.ViewHolder?
In my MainActivity I have something like this:在我的 MainActivity 我有这样的事情:
recyclerAdapter = new RecyclerAdapter(this, arrayList);
recyclerView.setAdapter(recyclerAdapter);
To update my RecyclerView, I do: (in MainActivity, too)为了更新我的 RecyclerView,我这样做:(也在 MainActivity 中)
Item item = new Item();
item.setId(id);
item.setMessage(message);
arrayList.set(position, item);
recyclerAdapter.notifyItemChanged(position);
I want to have a button within every RecyclerView list item which can enable/disable the current entry.我想在每个 RecyclerView 列表项中都有一个按钮,可以启用/禁用当前条目。 Therefore I need to get the current toggle state.
因此我需要获取当前的切换状态。
My problem is, how can I update the RecyclerView in MainActivity from within my ViewHolder?我的问题是,如何从 ViewHolder 中更新 MainActivity 中的 RecyclerView? RecyclerView.ViewHolder:
RecyclerView.ViewHolder:
public class SetViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{//, View.OnLongClickListener{
public ImageView toggle;
public SetViewHolder(View itemView){
super(itemView);
toggle = (ImageView) itemView.findViewById(R.id.img_main_card_toggle);
toggle.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == toggle.getId()) {
int clicked_position = getAdapterPosition();
//TODO update Item of RecyclerView of MainActivity
}
}
My Recycler.Adapter:我的 Recycler.Adapter:
public class RulesAdapter extends RecyclerView.Adapter<SetViewHolder>{
private Activity activity;
List<Item> items = Collections.emptyList();
private OnTapListener onTapListener;
public RulesAdapter(Activity activity, List<Item> items){
this.activity = activity;
this.items = items;
}
@Override
public SetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rules_list_item,parent,false);
return new SetViewHolder(view);
}
@Override
public void onBindViewHolder(SetViewHolder holder, final int position) {
holder.recevied_message.setText(items.get(position).getReceived_message());
holder.reply_message.setText(items.get(position).getReply_message());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(onTapListener != null){
onTapListener.OnTapView(position);
}
}
});
}
@Override
public int getItemCount() {
return items.size();
}
public void setOnTapListener(OnTapListener onTapListener){
this.onTapListener = onTapListener;
}
} }
Define an Interface
.定义一个
Interface
。
public interface OnRecyclerItemToggleClickListener {
void onToggleClick(int adapterPosition);
}
Implement this in your adapter
.在您的
adapter
实现这一点。 And pass the adapter instance to the ViewHolder
through a setter method in the onCreateViewHolder
callback.并通过
onCreateViewHolder
回调中的 setter 方法将适配器实例传递给ViewHolder
。
public class SetViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{//, View.OnLongClickListener{
public ImageView toggle;
private OnRecyclerItemToggleClickListener listener;
public SetViewHolder(View itemView){
super(itemView);
toggle = (ImageView)
itemView.findViewById(R.id.img_main_card_toggle);
toggle.setOnClickListener(this);
}
public void setRecyclerItemToggleClickListener( OnRecyclerItemToggleClickListener listener) {
this.listener = listener;
}
@Override
public void onClick(View v) {
if (v.getId() == toggle.getId()) {
int clicked_position = getAdapterPosition();
//TODO update Item of RecyclerView of MainActivity
listener.onToggleClick(clicked_position);
}
}
In your adapter:在您的适配器中:
@Override
public SetViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.rules_list_item,parent,false);
SetViewHolder holder = new SetViewHolder(view);
holder.setOnRecyclerItemToggleClickListener(this);
return holder;
}
@Override public void onToggleClick(int adapterPosition) {
// you will get the callback here when the toggle button is clicked.
// you can update the ArrayList here.
// Or similarly, call an interface method to Activity.
}
And call this onToggleClick
method from ViewHolder
when the toggle is clicked.并在单击切换时从
ViewHolder
调用此onToggleClick
方法。 You will get a callback to adapter
, where you can update the ArrayList
.您将收到对
adapter
的回调,您可以在其中更新ArrayList
。 Otherwise you can have another similar Interface
to give callback to Activity
from the adapter.否则,您可以使用另一个类似的
Interface
从适配器向Activity
提供回调。
You just have to add a static function and make items static too:您只需要添加一个静态函数并使项目也成为静态:
public static ArrayList<Items> getAreayList()
{
return items;
}
And get this function in MainActivity
:并在
MainActivity
获取此功能:
onStart()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.