2016-11-26 28 views
0

zu android.app.Activity gegossen habe ich Recycler Adapter-Klasse und implementiert die setOnClickListener Fragment zu ersetzen:android.app.Application kann nicht während der Verwendung FragmentManager in Recycler Adapter

public PlacesAdapter(Context mContext, List<Place> placeList) { 
    this.mContext = mContext; 
    this.placeList = placeList; 
} 
holder.thumbnail.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     FragmentManager fm = ((Activity)mContext).getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.mainFragmenLayout, new restaurantsFragment()); 
     Toast.makeText(mContext, "The place is tapped.", Toast.LENGTH_SHORT).show(); 
    } 
}); 

Ich bin mit API 25 und haben folgende Importe:

import android.app.Activity; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 

Der Kontext wird wie folgt erstellt:

private Context mContext; 
public PlacesAdapter(Context mContext, List<Place> placeList) { 
    this.mContext = mContext; 
    this.placeList = placeList; 
} 

Und der Adapter wird wie folgt instanziiert:

adapter = new PlacesAdapter(getActivity().getApplicationContext(), placeList); 

Aber die App stürzt ab und kehrt folgenden Fehler:

java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity

+1

Bitte zeigen, wie Sie 'mContext' zugewiesen –

+0

Sie verwendet' getApplicationContext' anstelle einer Aktivität, ich wette, –

+0

@ cricket_007 die aktualisierte Frage bitte. –

Antwort

0

Sie verwenden die Anwendung Context. Deshalb können Sie das nicht auf Activity übertragen.

Anstatt den Kontext zu speichern, können Sie Activity speichern. Oder noch besser, speichern Sie eine WeakReference zu einem Activity.

WeakReference<Activity> weakRef; 

Activity activity = weakRef.get(); 
if(weakRef.get() != null) 
{ 
    FragmentManager fm = activity.getFragmentManager(); 
} 
+0

Oder besser, habe den Adapter Callback an die Holding-Aktivität statt "nach oben" für den Fragment-Manager –

+0

Ich stimme zu, aber wer weiß, was OP dort tut :) – FunctionR

Verwandte Themen