【问题标题】:how to handle recyclerview click listener to open new fragment如何处理recyclerview单击侦听器以打开新片段
【发布时间】:2018-03-07 09:37:25
【问题描述】:

我想在 recyclerview(一个项目)的 onclick 中打开另一个片段。如何在 recyclerview 点击监听器上打开另一个片段。我想移到回收器视图上的另一个片段查看一个列表以打开另一个片段。我也设置了回收站视图和适配器。

    @BindView(R.id.recyclerView)
     RecyclerView recyclerView;
    ArrayList<ListCallback> listCallback = new ArrayList<>();

     public static SearchResultFragment newInstance() {
    return new SearchResultFragment();
}

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.fragment_search_result, 
      container, false);

       recyclerView.addOnItemTouchListener(new 
        RecyclerView.OnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) 
        {


            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean 
        disallowIntercept) {

        }
        });
        return view;
        }`

【问题讨论】:

    标签: android android-fragments fragment android-recyclerview


    【解决方案1】:

    使用此链接为您的适配器设置 onItemClickListener...

    https://antonioleiva.com/recyclerview-listener/

    然后在将侦听器传递给 RecyclerView 适配器的构造函数时.. 把这个写在 onitemclick..

    Fragment fragment = new XYZFragment();
    getActivity().getFragmentManager().beginTransaction..... and so on.. 
    

    替换您当前的片段。

    【讨论】:

      【解决方案2】:

      您需要在适配器内部编写 onClickListner,如下所示。

      static class ViewHolder extends RecyclerView.ViewHolder {
              private TextView name;
              private ImageView image;
      
              public ViewHolder(View itemView) {
      
                  super(itemView);
                  name = (TextView) itemView.findViewById(R.id.name);
                  image = (ImageView) itemView.findViewById(R.id.image);
              }
      
              public void bind(final ContentItem item, final OnItemClickListener listener) {
      
                  name.setText(item.name);
                  Picasso.with(itemView.getContext()).load(item.imageUrl).into(image);
                  itemView.setOnClickListener(new View.OnClickListener() {
      
                      @Override public void onClick(View v) {
                         // This is OnClick of any list Item
                          listener.onItemClick(item);
                      }
      
                  });
      }
      

      在你的适配器内部创建一个接口,如下所示

      public interface OnItemClickListener {
              void onItemClick(ContentItem item);
          }
      

      在你的父Activity中实现上述接口并编写代码替换Fragment。

      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.details, new NewFragmentToReplace(), "NewFragmentTag"); 
      ft.commit(); 
      

      【讨论】:

        猜你喜欢
        • 2017-06-18
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多