【问题标题】:doesn't show getSupportFragmentManager on ViewHolder in RecyclerView在 RecyclerView 的 ViewHolder 上不显示 getSupportFragmentManager
【发布时间】:2015-11-19 03:28:21
【问题描述】:
在ViewHolder,我无法拨打getSupportFragmentManager。
我想在 Fragment 之间切换
我搜索了所有的谷歌页面。但我找不到。
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public ImageView imgThumbnail;//img
public TextView tvspecies; //text
public ViewHolder(View itemView) {
super(itemView);
imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
tvspecies = (TextView)itemView.findViewById(R.id.tv_species);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {/*버튼 실행했을때 실행부분*/
Fragment fm=new NewsFragment();
FragmentTransaction transaction=fm.getFragmentManager().beginTransaction();
transaction.replace(R.id.Linearcontainer, fm);
transaction.addToBackStack(null);
transaction.commit();
}//onClick
}//ViewHolder
【问题讨论】:
标签:
android
android-fragments
android-recyclerview
fragment
【解决方案1】:
试试这个
public HorizontalProductAdapter(Activity context, List<RecycleIndividualProduct>data, FragmentManager fragmentManager){
inflater = LayoutInflater.from(context);
this.subActivityData = data;
this.fragmentManager=fragmentManager;
}
并从您的活动或片段中调用您的适配器
mAdapter = new HorizontalProductAdapter(getActivity(),allDeals,getFragmentManager());
【解决方案2】:
只要这样做,
从实例化适配器的活动或片段中传递 getSupportFragmentManager,并在适配器类构造函数中执行此操作。
public ViewHolder(View itemView, FragmentManager fragmentManager) {
super(itemView);
imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
tvspecies = (TextView)itemView.findViewById(R.id.tv_species);
this.fragmentManager = fragmentManager
itemView.setOnClickListener(this);
}
【解决方案3】:
在我的 recyclerview 适配器类中,我这样做了:
//recyclerView adapter global variable
private List<Data_Class> dataModel;
private Context mContext;
private FragmentManager FragManager;
//Recyclerview adapter constructor
public Recycler_Adapter_Class(Context appContext, List <Data_Class> data, FragmentManager fmanager) {
this.mContext = appContext;
this.dataModel = data;
this.FragManager = fmanager;
}
//In the activity or Fragment that calls the recyclerview adapter I did this:
Recycler_Adapter_Class RC = new Recycler_Adapter_Class(this, Data_Class_List, this.getSupportFragmentManager());
RecyclerView rView = (RecyclerView) findViewById(R.id.recycler_view);
rView.setAdapter(RC);
希望这对某人有所帮助。干杯!
【解决方案4】:
<p>Pass FragmentTransaction by constructing and then replace.</p>
<code>public SettingsAdapter(Context context, List<Settings> settingsList, android.support.v4.app.FragmentTransaction ft){
this.context = context;
this.settingsList = settingsList;
this.ft = ft;
}</code>
// Calling the SettingsAdapter with constructors
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
settingsAdapter = new SettingsAdapter(getActivity(), settingsList, fragmentTransaction);`enter code here`