【问题标题】:Android - call fragment from a recycler view inside another fragmentAndroid - 从另一个片段内的回收器视图调用片段
【发布时间】:2021-08-29 18:28:26
【问题描述】:

我有一个最初有 5 个部分的应用程序 (Java)。所有这些都是片段,它们可以通过底部导航中的 5 个图标访问。但是,其中一个部分(课程)现在被替换为包含回收器视图的不同片段。在这种新设计下,回收站视图中的一项将调用课程片段。

问题是,如何从新片段中包含的 Recycler 视图中调用课程片段?

通常在回收站视图中,我会使用如下代码:

    @Override
    public void onClick(View v) {

        int index = getAdapterPosition();
        LessonItem item = lessonList.get(index);

        Intent intent = new Intent(context, SomeActivity.class);

        Bundle bundle = new Bundle();
        bundle.putSerializable("lesson", item);
        intent.putExtras(bundle);

        ((Activity) context).startActivityForResult(intent, 1);

    }

但在这种情况下,我不是在处理活动。有没有一种方法可以在无需将片段转换为活动的情况下完成此操作?

【问题讨论】:

    标签: android android-fragments android-recyclerview


    【解决方案1】:

    正如之前提到的ismailfarisi,如果你使用Navigation Component,它会使过渡更容易。

    但是,如果您仍想手动管理片段替换,您可以接口作为回调。

    interface LessonItemListener {
         void onItemClick(LessonItem item);
    }
    

    在您的回收站视图适配器中

    class YourAdapter {
    
       public YourAdapter(LessonItemListener listener) {
           this.listener = listener;
       }
    
       private LessonItemListener listener;
    
       ...
    
       @Override
       public void onClick(View v) {
            int index = getAdapterPosition();
            LessonItem item = lessonList.get(index);
            listener.onItemClick();
       }
    
    }
    

    在你的片段中有recyclerview

    class YourFragment {
    
         private LessonItemListener listener;
    
         
         public void setListener(LessonItemListener listener) {
              this.listener = listener;
         }
    
         private void setupRecyclerView() {
              YourAdapter adapter = new YourAdapter(listener);
              recyclerView.setAdapter(adapter);
         }
    
    }
    

    在你的 Activity 中包含那些片段

    class YourActivity extends AppCompatActivity implements LessonItemListener {
    
    
        private void setupFragments() {
              YourFragment fragment = new YourFragment();
              fragment.setListener(this);
        }
    
        ...
    
        @Override
        public void onItemClick(LessonItem item) {
             //you are in activity now
             //make whatever you want here
             //such as fragment replacement in your bottom nav
        }
    
    }
    

    【讨论】:

    • 谢谢,这真的很有帮助!
    【解决方案2】:

    jetpack 的导航组件更适合处理片段转换

    您可以查看此文档https://developer.android.com/guide/navigation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2021-06-13
      相关资源
      最近更新 更多