2017-06-28 8 views
-2

私はAdapter ClassからFragmentを呼び出したいが、そうすることはできない。 したがって、フラグメントを呼び出すメソッドを用意してください。 )(Intentを使わずにアダプタクラスからフラグメントを開くには?

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

}

エディタがgetActivityを解決することができません:私は最初の呼び出し元の活動の方法を持っているし、その後フラグメントを切り替えると、他の方法をここで

があるコードです方法で

FragmentManager fm = getActivity().getFragmentManager(); 
+1

'FragmentManager fm = mContext.getFragmentManager();' –

答えて

0

getFragmentManager();を渡します。 mContextActivityにキャストします。

このようなものです。

FragmentManager fm = (Activity)mContext.getFragmentManager(); 
-1

このコードを使用して、アダプタクラスからフラグメントを置き換えます。

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

これを行うより良い方法は、インターフェイスを使用してアダプタを呼び出すクラスに通知することです。

このような何か:

public interface NotifyChange { 

    void onItemClicked(); 
} 

その後onItemClickedで()操作を行うには、あなたが達成したいです。

関連する問題