当前位置: 首页 > 知识库问答 >
问题:

在片段中使用recyclerview事件

宇文灿
2023-03-14

朋友们早上好,我的问题如下。我有一个带有按钮的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;
}

提前感谢。

共有1个答案

养研
2023-03-14

您可以使用回调(接口)在适配器和片段之间进行通信。例如,考虑下面的回调(您可以将它作为单独的文件):

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);
        }
    });
 类似资料:
  • 问题内容: 我在用Firebase的数据制作片段时遇到问题。我希望应用程序在单击按钮以从一个片段更改为片段后显示,但是它确实更改了所显示的片段,但未显示任何内容。 我知道有很多这样的问题,但是我似乎找不到正确的解决方案。 我已经制作了Firebase RecyclerView所需的所有内容,并且还尝试将其构建在活动而不是片段中,并且确实可以,但是不能与片段一起使用。我试图初始化onCreateVi

  • 我有一个使用RecyclerView的列表,我想要的是,当我点击列表项时,它会打开一个片段,我一直在搜索,我只在一个活动中找到了它,但我只在片段中工作,如果我使用活动,它会随着我的操作栏消失,它都在片段中设置。 这是我的适配器类: 我需要将信用卡id发送到片段,调用控制器并从数据库中获取信息,我尝试了使用intent,但只有在使用startActivity(intent)调用活动时才有效。 这里是

  • 我有方法: 将图像添加到我的recyclerview。如果它在活动中,我会在OnCreate中调用initImageBitmaps()。不幸的是,我必须在片段中使用它,问题是:如何将这些方法实现到扩展片段的类?当然,所有内容都将显示在RecyclerView中,并带有xml中的recycler\u视图id。 编辑:我的适配器: 它仅在注释mContext=context时编译 在适配器中。那么错误

  • 我正在尝试在MVVMCross Xamarin Adroid应用程序中使用ActionBar。我能够在片段中加载布局,问题是上下文总是指向MainView而不是布局视图。我试图更改上下文,但资源异常。错误是 Java.Lang.NullPointerException:尝试在 null 对象引用上调用虚拟方法 'android.content.res.Resources android.conte

  • 这是我的代码,根据文档,它是用于: 我在这里找到了一个解决方案,但我并不真正理解它,因为它是用编写的,我也不理解。我需要帮助!! ---编辑----

  • 此时,Frag2在堆栈上,是唯一可见的片段。我使用了replace和addToBackStack,因为我需要后退导航。我的问题是,当我在Frag2内旋转屏幕时,活动中的super.oncreate(savedInstanceState)方法调用frag1的构造函数。 在用户按下后退按钮之前,有没有什么方法可以避免调用Frag1的构造函数?