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

Android 片段未在RecyclerView.Adapter内打开(调用片段时在getFragmentManager()中显示错误),android,android-studio,android-recyclerview,Android,Android Studio,Android Recyclerview,在这里,我想打开RecycleView中的片段,但它的显示错误,但当我打开活动时,它的工作在这里。当尝试使用片段管理器的here打开片段时,Recycler视图类无法解析为其中的getFragmentManager()方法。请提供一个解决方案 public class AdapterMudra extends RecyclerView.Adapter<AdapterMudra.ReyclerViewHolder> { private LayoutInflater layoutInf

在这里,我想打开RecycleView中的片段,但它的显示错误,但当我打开活动时,它的工作在这里。当尝试使用片段管理器的here打开片段时,Recycler视图类无法解析为其中的getFragmentManager()方法。请提供一个解决方案

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);
                }



            }
        });
    }
}
}
公共类AdapterMudra扩展了RecyclerView.Adapter{
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私人语境;
私有ArrayList项;
公共AdapterMudra(上下文、ArrayList项){
this.layoutInflater=layoutInflater.from(上下文);
this.context=上下文;
这个项目=项目;
}
@凌驾
public ReyclServiceWholder onCreateViewHolder(视图组父级,int-viewType){
查看项目=布局平坦。充气(R.layout.item\u recycler\u视图,父项,false);
返回新的REYCLERVIEWWORLDER(项目);
}
@凌驾
BindViewHolder上的公共无效(最终重循环服务所有者,内部位置){
ItemMudra item=items.get(位置);
holder.image.setImageResource(item.getDrawableMudra());
holder.appName.setText(item.getNameMudra());
}
@凌驾
public int getItemCount(){
返回items.size();
}
类ReyclerViewHolder扩展了RecyclerView.ViewHolder{
私有图像查看图像;
私有文本视图appName;
私人ReyclServiceWholder(最终视图v){
超级(五);
image=(ImageView)v.findviewbyd(R.id.image);
MyName=(TextView)v.findViewById(R.id.my_name);
v、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
if(MyName.getText().toString()==“XYZ”)
{
***//此处未打开的片段显示错误////
***
这里我想调用Fragment,但它在GetFragment管理器中显示错误***
Fragment Fragment=new XYZ();
FragmentTransaction=getFragmentManager().beginTransaction();
事务.替换(R.id.fragment\u容器,fragment);
transaction.addToBackStack(null);//这将管理backstack
commit();
}
if(MyName.getText().toString()==“ABC”)
{
***//在这里,当我打开其中的活动时,它就起作用了***
Intent Intent=新的Intent(v.getContext(),ExtraActivityFormTesting.class);
背景。开始触觉(意图);
}
}
});
}
}
}

我假设您的
上下文
是一个
活动
,因此您可以执行以下操作

((Activity) context).getFragmentManager()

首先,确保另一个分段类具有要分段的必要实现和构造函数。这意味着,类XYZ可能会阻止您的片段事务丢失一些基本元素

例如,以下导入

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
如果这样的话。然后首先我要你改革

   Fragment fragment= new XYZ();

第二您的片段管理器构造得很糟糕

改革这个

 Fragment fragment= new XYZ();
            FragmentTransaction transaction = getFragmentManager().beginTransaction();


*对于将来的参考,当您使用适配器上下文时,您需要从终端引入错误日志,然后对于access fragment manager,您需要转换上下文。所以你应该用这种方式

Fragment fragment= new FirstFragment();
FragmentManager manager = (MainActivityForRecy)context).getSupportFragmentManager();
                    FragmentTransaction transaction = manager.beginTransaction();
                    transaction.replace(R.id.fragment_container, fragment);
                    transaction.addToBackStack(null);  // this will manage backstack
                    transaction.commit();
                    Toast.makeText(context, "you press clicked",Toast.LENGTH_SHORT).show();
YourParentActivity myActivity = (YourParentActivity)context
现在您可以访问片段管理器的方法,如

myActivity.getSupportFragmentManager();
如果打开特定选项卡的片段,则应使用getChildSupportFragmentManager()而不是getSupportFragmentManager()

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


祝您好运

如果您的问题是使用getFragmentManaget实现,请执行以下操作: 创造 FragmentManager fm=getFragmentManager(); 并将其传递给RecyclerView,然后再次传递给ViewHolder并使用它。太容易了


注意:passed表示将其作为argumat发送给构造函数

由于上下文已被传递,因此无需再次传递mainActivityForRecy。唯一需要的是将该上下文转换为活动,然后调用GetSupportFragmentManageries,因为需要将其转换为某个活动((YourActivityName)上下文);将工作括号放错位置,请尝试((MainActivityForRecy)上下文)。getSupportFragmentManager();使用FragmentTransaction时,事务=getSupportFragmentManager().beginTransaction();错误Occered-->错误:(74,59)错误:找不到符号方法getSupportFragmentManager()
YourParentActivity myActivity = (YourParentActivity)context
myActivity.getSupportFragmentManager();