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

当我从片段调用接口类时,它不起作用

翟默
2023-03-14

我试图在我的项目中实现这段代码,但不起作用RecycerView:如何捕捉ImageView上的onClick?:

我实现了一个接口来处理RecycerView中的onclick imageview和onclick row。问题是,当我试图在imageview上或在行中单击时,不会发生任何事情。如果我在我的ViewHolder类中尝试同样的方法,效果会很好,因为我可以看到祝酒词。问题是我需要这个工作从我的片段。

我认为问题可能是当我将监听器传递给Viewholder的构造函数时,或者当我从片段传递监听器时。

一些帮助将会是偶然的:

我的适配器类:

 private static List<DatabaseModel> dbList;
 private static Context context;
 private RecyclerViewClickListener listener;


public class MainTimelineRecyclerAdapter extends RecyclerView.Adapter<MainTimelineRecyclerAdapter.AnViewHolder> {

    public MainTimelineRecyclerAdapter(Context context, List<DatabaseModel> dbList, RecyclerViewClickListener listener ){
        this.dbList = new ArrayList<DatabaseModel>();
        this.context = context;
        this.dbList = dbList;
        this.listener = listener;

  }

public static class AnViewHolder extends RecyclerView.ViewHolder {

        public TextView name;
        public ImageView contact;

        public AnViewHolder(final View itemLayoutView, final RecyclerViewClickListener listener) {
            super(itemLayoutView);


            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null)
                        listener.onRowClicked(getAdapterPosition());
                }
            });

            contact.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null)
                        listener.onViewClicked(v, getAdapterPosition());
                }
            });

        }
    }

 public interface RecyclerViewClickListener {
        void onRowClicked(int position);
        void onViewClicked(View v, int position);
    }
}

我的片段:

public class MainTimeline extends Fragment implements RecyclerViewClickListener {
    private RecyclerViewClickListener listener;
.
.
.

        mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, listener);


   @Override
    public void onViewClicked(View view, int position) {
        Toast.makeText(getActivity(), "photo", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onRowClicked(int position) {
        Toast.makeText(getActivity(), "view", Toast.LENGTH_SHORT).show();

        }
}

共有1个答案

孟沛
2023-03-14

如果希望片段侦听适配器中发生的操作,则需要将其注册为适配器中发生的事件的侦听器(通过实现接口并将片段作为侦听器传递):

public class MainTimeline extends Fragment implements RecyclerViewClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // you don't need a private RecyclerViewClickListener listener; reference as you have the fragment itself
        mAdapter = new MainTimelineRecyclerAdapter(getActivity(), dbList, this); 
    }
    // implement the methods from the interface
}
 类似资料:
  • 下面的函数在服务中被调用。当条件得到满足时,意图就是要求做某事。我使用了

  • 我的GridbagLayout有些问题。我创建了一个JPanel(在本例中称为mainPanel),它的布局被设置为GridBagLayout。我已经为每个JButton指定了约束,并将约束添加到每个Button。现在,当我运行代码时,按钮总是紧挨着的,而不考虑我在约束中指示的Gridx/Gridy值。此外,按钮总是位于JFrame的中心,我希望一个按钮出现在右上角、左上角和南边。 这是我运行代码

  • 在我活动页面之一的片段中,我希望从用户处获得权限,并在授予权限后执行一些操作,但不起作用,且在授予权限后看不到任何日志

  • 嗨,我在主片段内使用带有碎片网的viewPager。我试图从画廊或相机中获取图像到位图,但在选择照片并启动ActivityForResult后,它不会在onActivityResult中捕获... 以下是我如何调用startActivityForResult: 这是我的onActivityResult: 有什么想法吗?

  • 我有一个ViewModel处理我的业务逻辑,我正在使用Koin将它注入到我的活动和每个片段中。然而,在我从片段A-片段B导航并导航回片段A之后,我的观察者再次被触发。为什么会发生这种情况?当我返回时,如何阻止这种onChanged被触发? 我尝试将'this'和'view LifecycleOwner'设置为LiveData的LifecycleOwner。 我还尝试将observable移动到on

  • 我使用带有ViewPager的FragmentPagerAdapter来切换片段 那么我如何使片段调用它们的onResume()呢?