繁体   English   中英

如何从我的适配器 onClick 打开一个片段

[英]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

  1. 创建接口:
    public interface MyItemClickListener { void onItemClick(int position); }

  2. 将此接口实现到您的活动/片段:

class MyActivity extends Activity implements MyItemClickListener{ }

  1. 将接口的对象传递给适配器:

MyAdapter adapter = new MyAdapter(this); //this is instance of MyItemClickListner

  1. 从适配器调用接口的方法:

// 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM