[英]How can I open a fragment from my Adapter onClick
我想从我的 RecyclerView Adapter onlick 打开一个名为optionsFragment
的新片段。 我尝试了很多教程,但我对此太愚蠢了。
新片段应该在左上角有一个后退箭头按钮,用于返回到 RecyclerView。
请帮我。
这是我在适配器中为我的持有人提供的 onClick 功能:
FragmentManager benutzerlisteManager = ((NavigationDrawerActivity)customContext).getSupportFragmentManager(); BenutzerOverviewFragment benutzerOverviewFragment = new BenutzerOverviewFragment(); benutzerlisteManager.beginTransaction().replace(R.id.content_navigation_drawer, benutzerOverviewFragment, benutzerOverviewFragment.getTag()).addToBackStack(null).commit();
我已经尝试了顶部的代码,但应用程序因此错误而崩溃:
NavigationDrawerActivity@b42040b 必须实现 OnFragmentInteractionListener
以下是如何从适配器加载新片段:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OptionsFragment optionsFrag = new OptionsFragment ();
((ActivityName)context).getSupportFragmentManager().beginTransaction().replace(R.id.container, optionsFrag,"OptionsFragment").addToBackStack(null).commit();
}
});
对于后按图标,请遵循以下操作: Manage toolbar's navigation and back button from fragment in android
创建接口:
public interface MyItemClickListener { void onItemClick(int position); }
将此接口实现到您的活动/片段:
class MyActivity extends Activity implements MyItemClickListener{ }
MyAdapter adapter = new MyAdapter(this); //this is instance of MyItemClickListner
// OnClickListener for holder
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
mMyClickListner.onItemClick(getAdapterPosition());
}
});
这将在您的活动/片段中调用 onItemClick。 从此方法声明中,您可以打开片段:
mMyClickListner.onItemClick(getAdapterPosition());
AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment fragment = new DetailFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer,fragment).addToBackStack(null).commit();
你可以写在onClick
我假设你有活动对象。 您可以像这样使用活动对象
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
activity.getFragmentManager().beginTransaction().replace(R.id.container,new YourFragment()).addToBackStack(null).commit();
}
});
尝试一下
private Context mContext;
ArrayList<Inquiry> mInquiryYearsLists;
InquiryFragment mInquiryFragment;
public InquiryAdapter(Context context, ArrayList<Inquiry> arrayListingg) {
this.mInquiryYearsLists = arrayListingg;
this.mContext = context;
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
mInquiryFragment = new InquiryDashboardFragment();
FragmentTransaction mFragmentTransaction = ((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.fragment_container, mInquiryFragment). mFragmentTransaction.addToBackStack(null).commit();
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.