这里我想在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);
}
}
});
}
}
}
答案 0 :(得分:0)
我认为您的context
是Activity
,因此您可以执行类似
((Activity) context).getFragmentManager()
答案 1 :(得分:0)
首先确保其他碎片类具有必要的实现和构造函数以进行碎片化。意思是,类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();
*对于将来的参考,您需要从终端
引入错误日志答案 2 :(得分:0)
当您使用适配器上下文然后访问片段管理器时,您需要转换上下文。所以你应该这样使用。
YourParentActivity myActivity = (YourParentActivity)context
现在您可以访问片段管理器的方法,如
myActivity.getSupportFragmentManager();
如果为特定的一个选项卡打开片段,则应使用getChildSupportFragmentManager()而不是getSupportFragmentManager()
注意:如果要从适配器类调用片段,则应创建接口并将侦听器传递给按钮单击方法,并使用该接口实现活动。
祝你好运答案 3 :(得分:0)
如果您的问题是使用getFragmentManaget实现,请执行以下操作: 创建 FragmentManager fm = getFragmentManager(); 在你的片段中并将其传递给您的RecyclerView并再次传递给您的ViewHolder并使用它。很容易。
注意:传递意味着将其作为参数发送给构造函数
答案 4 :(得分:-1)
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();