上诉代码中从fragment中传到adapter中的activity,使用Activity.getSupportFragmentManager()方法不存在
时间: 2024-02-23 22:03:01 浏览: 152
如果你的 Adapter 类中需要使用 `getSupportFragmentManager()` 方法,但是该方法在 `Activity` 类中不存在,那么你可以考虑向 Adapter 构造方法中传入一个 FragmentManager 对象,或者传入一个 FragmentActivity 对象,然后通过该对象获取 FragmentManager。
例如,你可以在 Activity 中创建一个 FragmentManager 对象,然后在创建 Adapter 实例时将该对象传递给 Adapter 的构造方法:
```java
public class MyActivity extends AppCompatActivity {
private FragmentManager mFragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFragmentManager = getSupportFragmentManager();
RecyclerView recyclerView = findViewById(R.id.recycler_view);
MyAdapter adapter = new MyAdapter(mFragmentManager);
recyclerView.setAdapter(adapter);
// ...
}
}
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
private FragmentManager mFragmentManager;
public MyAdapter(FragmentManager fragmentManager) {
mFragmentManager = fragmentManager;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// ...
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// ...
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int targetId = Integer.valueOf(imageBean.getTarget());
if(targetId == 1)){
mFragmentManager.beginTransaction()
.replace(R.id.nav_host_fragment_activity_main,new VideoboxFragment(),null)
.addToBackStack(null)
.commit();
((MainActivity) mActivity).updateNavMenu(R.id.navigation_videobox);
}
}
});
}
// ...
}
```
在上面的示例代码中,我们在 Activity 中创建了一个 `FragmentManager` 对象,并将其传递给了 Adapter 的构造方法。在 Adapter 中,我们使用这个 `FragmentManager` 对象来执行 Fragment 相关的操作,而不是直接使用 `Activity` 中的 `getSupportFragmentManager()` 方法。
阅读全文