Запуск 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 3

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