如何从适配器类调用getsupportfragmentmanager()?

时间:2015-08-12 09:37:06

标签: android

我有(state, { copy }) => state.push(createItem(copy)); 作为ViewPager中的第一项。我想将RecyclerView设置为FragmentStatePagerAdapter方法中的viewpager。 但是我不能打电话给onBindViewHolder()。请帮助!! 这是我的代码:

getsupportfragmentmanager()

9 个答案:

答案 0 :(得分:59)

我通过投射mContext

解决了这个问题
((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction()
                            .replace(R.id.item_detail_container, fragment)
                            .commit();

答案 1 :(得分:9)

最好的解决方案是将活动(或)片段中对上下文的引用传递给适配器。

groupby()

然后像这样向AppCompatActivity上传上下文,并获取getSupportFragmentManager

    public UsersAdapter(ArrayList<User> items , Context context) {
    usersList = items;
    this.context = context;
    }

分享以改善。

答案 2 :(得分:7)

您可以在这里设置转换;)

public void pushFragment(Fragment newFragment, Context context){

    FragmentTransaction transaction = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, newFragment);
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    transaction.addToBackStack(null);
    transaction.commit();

}

答案 3 :(得分:4)

首先,您必须将上下文传递给适配器构造函数。

然后你必须使用该上下文引用来获得 getSupportFragmentManager

mCustomPagerAdapter = new NewPagerAdapter(context.getSupportFragmentManager());
viewHolderSecond.vPager.setAdapter(mCustomPagerAdapter);

答案 4 :(得分:3)

另一种解决方案......

声明上下文

private Toast mssgeToast;

private Context ctxContext;

public MyViewListener(myView pView){

    this.mView = pView;
    this.ctxContext = pView.getContext();

}

下一步...

 public void pushFragment(Context context){
    FragmentManager fm = ((FragmentActivity)context).getSupportFragmentManager();
    PopupClickFragment pcf = new PopupClickFragment();

    pcf.show(fm, "");
   // FragmentTransaction transaction = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();

}

并声明为onClickListener。 例如:

  @Override
    public void onCellClicked (@NonNull RecyclerView.ViewHolder p_jCellView,int p_nXPosition,
    int p_nYPosition){
        //TODO: AQUI SE DEBE LEVANTAR EL POPUP INSTANCIANDO .SHOW();

        pushFragment(ctxContext);
    }

答案 5 :(得分:1)

对于使用 kotlin 的人来说,您可以使用此解决方案

val dialog = IntervAddFragment()
       val ft = (context as AppCompatActivity).supportFragmentManager.beginTransaction()
        dialog.show(ft, ContentValues.TAG)

它将完美地工作.Allah。

答案 6 :(得分:1)

对于有此错误的人:

  

不可转换的类型;无法将“ android.content.Context”强制转换为YourFragment

我实现了此解决方案

更新您的适配器构造函数以接受Fragment作为参数。

类似:

customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1
, getList, YourFragment.this);

并更新适配器的构造函数:

public CustomAdapter(Context context, int id, YourFragmentfragment) {
    this.fragment = fragment;
}

然后使用片段变量调用方法。

fragment.doSomething();

The answer来自Shivam Verma

答案 7 :(得分:1)

我的工作方式如下:

@Override
public void onBindViewHolder(DataAdapter.ViewHolder holder, final int position) {

        holder.txtTitle.setText(list.get(position).getTitle());
        holder.txtMessage.setText(list.get(position).getMessage());

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String title = list.get(position).getTitle();

                if(title.equals("FRECUENTES")){
                    RequestFrequentFragment fragment = new RequestFrequentFragment(); // you fragment 
                    FragmentManager fragmentManager = ((FragmentActivity) v.getContext()).getSupportFragmentManager(); // instantiate your view context
                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.nav_host_fragment, fragment);// your container and your fragment
                    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();

                }

            }
        });
}

答案 8 :(得分:0)

 FragmentManager fragmentManager = ((FragmentActivity) view.getContext()).getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

尝试这个..它对我有用。