繁体   English   中英

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

[英]Fragment Not open inside RecyclerView.Adapter (show error in getFragmentManager() while calling fragment)

在这里我想在RecycleView中打开片段,但是它显示错误,但是当我打开活动时,它的工作在这里。 当尝试使用片段管理器的此处打开片段时,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);
                }



            }
        });
    }
}
}

我认为您的contextActivity因此您可以执行以下操作

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

   XYZ fragment= new XYZ();

第二,您的片段管理器构造错误

改革这个

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

     XYZ fragment= new XYZ();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

*为了将来参考,您需要从终端导入错误日志

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

YourParentActivity myActivity = (YourParentActivity)context

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

myActivity.getSupportFragmentManager();

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

注意:如果要从适配器类调用片段,则应创建接口并将侦听器传递给按钮click方法,并使用该接口实现活动。

祝好运

如果您的问题是使用getFragmentManaget实现,请执行以下操作:create FragmentManager fm = getFragmentManager(); 在您的Fragment中并将其传递给RecyclerView,然后再次将其传递给ViewHolder并使用它。 太简单。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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