在 Fragment 中使用 recyclerview 的事件
Use the event of a recyclerview in a Fragment
朋友们早上好,
我的问题如下。我有一个带按钮的 cardview,我在 recyclerview 中捕获按钮事件,但我想在包含 recyclerview 的片段中捕获按钮事件。
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {
myViewHolder.imagen.setImageResource(mData.get(i).getImage());
myViewHolder.title.setText(mData.get(i).getTitel());
myViewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"ok"+i,Toast.LENGTH_SHORT).show();
}
});
}
我需要用到这里的活动
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_form4, container, false);
list = new ArrayList<>();
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
RecyclerView recyclerView=(RecyclerView)view.findViewById(R.id.form4_recyclerview);
RecyclerViewAdapterFotoForm4 adapterFotoForm4=new RecyclerViewAdapterFotoForm4(getContext(),list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapterFotoForm4);
return view;
}
提前致谢。
你可以有一个回调(接口)来在适配器和片段之间进行通信。例如考虑以下回调(您可以将其作为单独的文件):
public interface OnClickCallback {
void onClicked(int position);
}
在您的片段中实现它,这样您将拥有以下覆盖方法
@Override
public void onClicked(int position){
// you will be retriving the clicked position
}
在您的片段中创建一个 OnClickCallback 实例并将其传递给适配器,以便在适配器的 setOnClickListener 方法中您可以使用回调与片段通信。
private OnClickCallback onClickCallback;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_form4, container, false);
onClickCallback = this;
list = new ArrayList<>();
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
RecyclerView recyclerView=(RecyclerView)view.findViewById(R.id.form4_recyclerview);
RecyclerViewAdapterFotoForm4 adapterFotoForm4=new RecyclerViewAdapterFotoForm4(getContext(),list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapterFotoForm4, onClickCallback);
return view;
}
在适配器构造函数中:
public Adapter(List<String> yourList, OnClickCallback itemClickCallback) {
this.yourList = yourList;
this.itemClickCallback = itemClickCallback;
}
在 setOnClickListener 中,您可以按如下方式调用它:
myViewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickCallback.onClicked(position);
}
});
朋友们早上好, 我的问题如下。我有一个带按钮的 cardview,我在 recyclerview 中捕获按钮事件,但我想在包含 recyclerview 的片段中捕获按钮事件。
@Override
public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, final int i) {
myViewHolder.imagen.setImageResource(mData.get(i).getImage());
myViewHolder.title.setText(mData.get(i).getTitel());
myViewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"ok"+i,Toast.LENGTH_SHORT).show();
}
});
}
我需要用到这里的活动
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_form4, container, false);
list = new ArrayList<>();
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
RecyclerView recyclerView=(RecyclerView)view.findViewById(R.id.form4_recyclerview);
RecyclerViewAdapterFotoForm4 adapterFotoForm4=new RecyclerViewAdapterFotoForm4(getContext(),list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapterFotoForm4);
return view;
}
提前致谢。
你可以有一个回调(接口)来在适配器和片段之间进行通信。例如考虑以下回调(您可以将其作为单独的文件):
public interface OnClickCallback {
void onClicked(int position);
}
在您的片段中实现它,这样您将拥有以下覆盖方法
@Override
public void onClicked(int position){
// you will be retriving the clicked position
}
在您的片段中创建一个 OnClickCallback 实例并将其传递给适配器,以便在适配器的 setOnClickListener 方法中您可以使用回调与片段通信。
private OnClickCallback onClickCallback;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_form4, container, false);
onClickCallback = this;
list = new ArrayList<>();
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
list.add(new POJOcarviewFotoForm4(R.drawable.ic_person_black_24dp,"Picture"));
RecyclerView recyclerView=(RecyclerView)view.findViewById(R.id.form4_recyclerview);
RecyclerViewAdapterFotoForm4 adapterFotoForm4=new RecyclerViewAdapterFotoForm4(getContext(),list);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(adapterFotoForm4, onClickCallback);
return view;
}
在适配器构造函数中:
public Adapter(List<String> yourList, OnClickCallback itemClickCallback) {
this.yourList = yourList;
this.itemClickCallback = itemClickCallback;
}
在 setOnClickListener 中,您可以按如下方式调用它:
myViewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickCallback.onClicked(position);
}
});