2017-06-28 4 views
-2

Ich möchte Fragment von Adapter-Klasse aufrufen, aber nicht in der Lage dazu .. Also bitte eine Methode, um das Fragment aufzurufen. Ich habe eine Methode der ersten Berufung Aktivität bekam und dann das Fragment Schalt ist es eine andere MethodeWie öffnet man ein Fragment aus der Adapterklasse ohne Absicht?

Hier ist der Code:

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

}

Der Editor nicht in der Lage ist getActivity zu lösen() Verfahren in

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

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

Antwort

0

Pass die mContext zu getFragmentManager();. Werfen Sie die mContext zu Activity.

So etwas wie das.

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

Verwenden Sie diesen Code zum Ersetzen eines Fragments aus der Adapterklasse.

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

Der bessere Weg, dies zu tun wäre, eine Schnittstelle zu verwenden, um die Klasse zu benachrichtigen, die den Adapter aufruft.

Etwas wie folgt aus:

public interface NotifyChange { 

    void onItemClicked(); 
} 

dann in onItemClicked() tun, um die Operation, die Sie erreichen wollen.

Verwandte Themen