Android - 从另一个片段中的回收器视图调用片段
Android - call fragment from a recycler view inside another fragment
我有一个应用程序 (Java),它最初有 5 个部分。所有这些都是片段,可以通过底部导航中的 5 个图标访问它们。但是,其中一个部分(课程)现在被另一个包含回收站视图的片段所取代。在这种新设计下,回收站视图中的一项将调用 Lessons 片段。
问题是,如何从包含在新片段中的 Recycler View 中调用 Lessons 片段?
通常在回收站视图中,我会使用如下代码:
@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);
}
但在这种情况下,我处理的不是 activity。有没有一种方法可以在不必将片段转换为 activity?
的情况下完成此操作
jetpack 中的导航组件更适合处理片段转换
正如ismailfarisi之前提到的,如果您使用导航组件,它会使转换更容易。
但是,如果您仍想手动管理片段替换,您可以 接口s 作为回调。
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
}
}
我有一个应用程序 (Java),它最初有 5 个部分。所有这些都是片段,可以通过底部导航中的 5 个图标访问它们。但是,其中一个部分(课程)现在被另一个包含回收站视图的片段所取代。在这种新设计下,回收站视图中的一项将调用 Lessons 片段。
问题是,如何从包含在新片段中的 Recycler View 中调用 Lessons 片段?
通常在回收站视图中,我会使用如下代码:
@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);
}
但在这种情况下,我处理的不是 activity。有没有一种方法可以在不必将片段转换为 activity?
的情况下完成此操作jetpack 中的导航组件更适合处理片段转换
正如ismailfarisi之前提到的,如果您使用导航组件,它会使转换更容易。
但是,如果您仍想手动管理片段替换,您可以 接口s 作为回调。
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
}
}