我有(state, { copy }) => state.push(createItem(copy));
作为ViewPager
中的第一项。我想将RecyclerView
设置为FragmentStatePagerAdapter
方法中的viewpager
。
但是我不能打电话给onBindViewHolder()
。请帮助!!
这是我的代码:
getsupportfragmentmanager()
答案 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();
答案 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();
尝试这个..它对我有用。