2016-11-26 3 views
0

У меня есть класс Ресайклер адаптера и реализован setOnClickListener заменить фрагмент:android.app.Application не может быть приведен к android.app.Activity при использовании FragmentManager в Recycler адаптер

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

Я использую API 25 и имеют после импорта:

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

контекст создается следующим образом:

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

И адаптер конкретизируется следующим образом:

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

Но приложение падает и возвращает следующие ошибки:

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

+1

Пожалуйста, покажите, как вы назначили 'mContext' –

+0

Вы использовали' getApplicationContext' вместо деятельности, я уверен –

+0

@ cricket_007 смотрите обновленный вопрос. –

ответ

0

Вы используете приложение Context. Вот почему вы не можете отличить это от Activity.

Вместо хранения Контекст вы можете хранить Activity. Или еще лучше, сохраните WeakReference до Activity.

WeakReference<Activity> weakRef; 

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

Или лучше иметь обратный вызов адаптера к холдингу. Активность вместо «достижения» для менеджера фрагментов –

+0

Я согласен, но кто знает, что делает OP там :) – FunctionR

 Смежные вопросы

  • Нет связанных вопросов^_^