Android 如何在不使用Intent的情况下从适配器类打开片段?
我想从适配器类调用片段,但无法这样做。。 因此,请使用一些方法来调用片段。我有一个方法,首先调用活动,然后切换片段,还有其他方法吗 代码如下:Android 如何在不使用Intent的情况下从适配器类打开片段?,android,android-fragments,adapter,Android,Android Fragments,Adapter,我想从适配器类调用片段,但无法这样做。。 因此,请使用一些方法来调用片段。我有一个方法,首先调用活动,然后切换片段,还有其他方法吗 代码如下: public class FanAdapter extends RecyclerView.Adapter<FanAdapter.MyViewHolder> { private Context mContext; private List<Fan> FanList; public class MyViewHolder exte
public class FanAdapter extends RecyclerView.Adapter<FanAdapter.MyViewHolder>
{
private Context mContext;
private List<Fan> FanList;
public class MyViewHolder extends RecyclerView.ViewHolder
{
public TextView testTitle;
public CardView mCardView;
public MyViewHolder(View view)
{
super(view);
mCardView = (CardView) view.findViewById(R.id.card_view);
testTitle = (TextView) view.findViewById(R.id.fan_name);
}
}
public FanAdapter(Context mContext, List<Fan> FanList)
{
this.mContext = mContext;
this.FanList = FanList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fanslist, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final Fan album = FanList.get(position);
holder.testTitle.setText(album.getName());
holder.mCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String Slecteditem= String.valueOf(position);
Bitmap bmp = BitmapFactory.decodeResource(Resources.getSystem(), position);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
Fragment fragment = new ProfileDisplay();
FragmentManager fm = getActivity().getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
Bundle args = new Bundle();
args.putString("itemname", Slecteditem);
args.putByteArray("picture", byteArray);
fragment.setArguments(args);
fragmentTransaction.replace(R.id.fl_toplayout, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Toast.makeText(mContext,"Profile"+album.getName(),Toast.LENGTH_LONG).show();
}
});
// loading album cover using Glide library
}
@Override
public int getItemCount()
{
return FanList.size();
}
将mContext传递给getFragmentManager;。将mContext强制转换为活动
像这样的
FragmentManager fm = (Activity)mContext.getFragmentManager();
使用此代码替换适配器类中的片段
Fragment fragment = new YourFragmentName();
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();
Bundle args = new Bundle();
args.putString("itemname", Slecteditem);
args.putByteArray("picture", byteArray);
fragment.setArguments(args);
更好的方法是使用接口通知调用适配器的类 大概是这样的:
public interface NotifyChange {
void onItemClicked();
}
然后在onItemClicked中执行您想要实现的操作。考虑到您的问题,如果您在片段中调用FanAdapter类,请在FanClass列表中创建一个FragmentManager,如下所示
private FragmentManager fragment;
public FragmentManager getFragment() {
return fragment;
}
public void setFragment(FragmentManager fragment) {
this.fragment = fragment;
}
并将其添加到风扇构造函数中
public Fan(FragmentManager fm){
this.fragment=fm;
}
在你的身体里
在您的列表中,您应该添加getFragmentManager
FragmentManager fm=mContext.getFragmentManager;
public Fan(FragmentManager fm){
this.fragment=fm;
}
FragmentTransaction ft=fan.get(position).getFragment().beginTransaction();
ft.replace(R.id.nav_host_fragment,fd);
ft.commit();
fan.add(new fan(your,own,variables,getFragmentManager()));