3

Я пробовал, как показано ниже, по методу onClick() класса recyelerview.viewholder.Запуск DialogFragment из класса, расширяющего RecyclerView.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"); 
} 

Образец Активности - это вид деятельности, на котором вид ресайклера. Он не показывает ошибок. Когда я запускаю приложение и рушится.

Журнал показывает, что деятельность была разрушена.

Любое решение?

+0

перевале в 'context' через конструктор адаптера и использовать его, чтобы получить Экземпляр FragmentManger. Или используйте метод обратного вызова для прослушивания события click в SampleActivity. Не создавайте 'new SampleActivity()' – Emil

+0

'getActivity(). GetSupportFragmentManager()', если у вас есть фрагмент –

+0

@Boss Я попробовал. Я не могу вызвать getSupportFragmentManager с контекстом в recyclerview.viewholder. –

ответ

6

Правильный способ - использовать интерфейс.

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"); 
    } 
} 
+0

Yess .... Я получил Это . Это совершенно то, что мне нужно. Спасибо @Boss –

+0

@Boss не могли бы вы объяснить больше, или ссылку на пример? где должен быть интерфейс OnItemClickListener? как весь этот код объединяется? –

+0

@YuvalLevy Вы можете создать новый файл для интерфейса или поместить его в класс адаптера. Что вы имели в виду, если бы этот код собрался вместе? Это отдельные файлы. – Emil

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