Запуск DialogFragment из класса, расширяющего RecyclerView.ViewHolder
Я попробовал, как показано ниже в onClick() метод recyelerview.класс viewholder.
SampleDialogFragment используется в примере расширения DialogFragment.
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
df.show(v.getContext().getSupportFragmentManager(), "Dialog");
}
Я столкнулся с проблемой в v.getContext().getSupportFragmentManager()
. Я не могу вызвать getSupportFragmentManager ().
Я также попытался, как показано ниже .
@Override
public void onClick(View v)
{
SampleDialogFragment df= new SampleDialogFragment();
SampleActivity activity = new SampleActivity();
df.show(activity.getSupportFragmentManager(), "Dialog");
}
SampleActivity-это действие, к которому прикреплено представление recycler . Он не показывает никакой ошибки. Когда я запускаю приложение и падаю.
Журнал показывает, что активность разрушилась.
Какое-нибудь решение ?
2 ответа:
Правильный способ заключается в использовании интерфейсом.
public interface OnItemClickListener { void onItemClicked(View v); }
И вызовите метод интерфейса при запуске метода onClick.
public class YourListAdapter extends RecyclerView.Adapter<...> //your code private OnItemClickListener listener; public YourListAdapter(OnItemClickListener listener /*your additional parameters*/) { this.listener = listener; //... } @Override public void onClick(View v){ listener.onItemClicked(View v); } }
Вы должны передать экземпляр интерфейса
OnItemClickListener
изSampleActivity
И пусть он реализует это в вашем
SampleActivity
public class SampleActivity extends FragmentActivity implements OnItemClickListener { @Override public void onItemClicked(View v) { SampleDialogFragment df= new SampleDialogFragment(); df.show(getSupportFragmentManager(), "Dialog"); } }
Самый простой способ, которым я его использую
public class AdapterProduct extends RecyclerView.Adapter<RecyclerView.ViewHolder> { FragmentManager FragManager ; // in constructor public AdapterProduct(Context context, RecyclerView view , ArrayList<Product> items , FragmentManager getSupportFragmentManager) { this.items = items; ctx = context; FragManager = getSupportFragmentManager; lastItemViewDetector(view); } }
В onClick
@Override public void onClick(View v) { SampleDialogFragment df= new SampleDialogFragment(); SampleActivity activity = new SampleActivity(); df.show(FragManager , "Dialog"); }
В вашем MainActivity или где вы устанавливаете recycleview
AdapterProduct mAdapter = new AdapterProduct(MainActivity.this, rv_Daily_Deals, BeanProduct,getSupportFragmentManager());