首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RecyclerView.Adapter内部未打开片段(调用片段时在getFragmentManager()中显示错误)

RecyclerView.Adapter内部未打开片段(调用片段时在getFragmentManager()中显示错误)
EN

Stack Overflow用户
提问于 2017-02-03 15:39:26
回答 4查看 590关注 0票数 1

在这里,我想打开RecycleView内部的片段,但它显示错误,但当我打开activity时,它在这里工作。当试图使用片段管理器打开一个片段时,回收器视图类不能解析为其中的getFragmentManager()方法。敬请提供解决方案

代码语言:javascript
复制
public class AdapterMudra extends RecyclerView.Adapter<AdapterMudra.ReyclerViewHolder> {

private LayoutInflater layoutInflater;
private Context context;
private ArrayList<ItemMudra> items;

public AdapterMudra(Context context, ArrayList<ItemMudra> items) {

    this.layoutInflater = LayoutInflater.from(context);
    this.context = context;
    this.items = items;

}
@Override
public ReyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View item = layoutInflater.inflate(R.layout.item_recycler_view, parent, false);

    return new ReyclerViewHolder(item);
}

@Override
public void onBindViewHolder(final ReyclerViewHolder holder, int position) {
    ItemMudra item = items.get(position);

    holder.image.setImageResource(item.getDrawableMudra());
    holder.appName.setText(item.getNameMudra());
}

@Override
public int getItemCount() {
    return items.size();
}

class ReyclerViewHolder extends RecyclerView.ViewHolder {
    private ImageView image;
    private TextView appName;

    private ReyclerViewHolder(final View v) {
        super(v);

        image = (ImageView) v.findViewById(R.id.image);
        MyName = (TextView) v.findViewById(R.id.my_name);

        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                if(MyName.getText().toString()=="XYZ")
                {







 ***//Fragment Not open here show error////
***
Here I want to call Fragment but its show error in GetFragment Manager***


                Fragment fragment= new XYZ();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.fragment_container, fragment); 
                transaction.addToBackStack(null);  // this will manage backstack
                transaction.commit();


                }
                if(MyName.getText().toString()=="ABC")
                {



*** //Here Its Work When I open activity inside it*** 

                    Intent intent=new Intent(v.getContext(),ExtraActivityFormTesting.class);
                    context.startActivity(intent);
                }



            }
        });
    }
}
}
EN

回答 4

Stack Overflow用户

发布于 2017-02-03 16:20:41

我假设您的context是一个Activity,因此您可以执行以下操作

代码语言:javascript
复制
((Activity) context).getFragmentManager()
票数 0
EN

Stack Overflow用户

发布于 2017-07-04 10:28:16

当您使用适配器上下文时,那么对于访问片段管理器,您需要转换上下文。所以你应该用这种方式。

代码语言:javascript
复制
YourParentActivity myActivity = (YourParentActivity)context

现在,您可以访问片段管理器的方法,

代码语言:javascript
复制
myActivity.getSupportFragmentManager();

如果您打开特定选项卡片段,则应该使用getChildSupportFragmentManager()而不是getSupportFragmentManager()

注意:如果您想从适配器类中调用片段,那么您应该创建接口并将侦听器传递给您的按钮单击方法,并使用该接口实现您的活动。

祝好运

票数 0
EN

Stack Overflow用户

发布于 2018-06-08 06:43:42

如果您的问题是使用getFragmentManaget实现,请如下所示:在您的片段中创建FragmentManager fm = getFragmentManager();并将其传递给RecyclerView,然后再次传递给ViewHolder并使用它。这么简单。

注意:传递意味着将其作为参数发送给构造函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42019103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档