2015-08-09 4 views
1

Когда я нажимаю кнопку в своем Activity, появляется сообщение DialogFragment. Внутри фрагмента диалога есть RecyclerView, который выглядит как обычный вид списка.RecyclerView внутри DialogFragment внутри Activity

Поведение, которое я хочу, - это то, что когда я нажимаю на строку n RecyclerView, DialogFragment закрывается, а Activity делает что-то на основе значения, связанного с строкой n.

Кажется, что ViewHolder должен реализовать интерфейс OnClickListener. При щелчке по строке делегат ViewHolder должен что-то сделать. Делегат должен быть DialogFragment. И DialogFragment в свою очередь разговаривает с Activity, к которому он прикреплен.

Если это так, то ViewHolder должен попросить DialogFragment сделать что-то, и DialogFragment просит Activity сделать что-то. Правильно ли это? Как передать ссылку DialogFragment на номер onCreateViewHolder()? Должно ли Adapter содержать ссылку на DialogFragment?

+0

Пожалуйста, проверьте: http://stackoverflow.com/questions/24885223/why-doesnt-recyclerview-have-onitemclicklistener-and-how-recyclerview-is-dif – sider

+0

Спасибо за ссылку. Я проверил это. Но мой случай отличается тем, что просмотр ресайклера находится внутри фрагмента, и ему нужно поговорить с ним. Я хочу знать, подходит ли мой подход. – Jonas

+0

Попробуйте работать с интерфейсом, создайте интерфейс, содержащий одну функцию onDialogItemClick, затем реализуйте его в действии и передайте его ссылку на адаптер. Затем вызовите этот метод с этой ссылкой в ​​адаптере. И пусть ваш метод работы выполняет свою работу. – UMESH0492

ответ

2

Да, вы двигаетесь в правильном направлении. Передайте ссылку DialogFragment в конструкторе адаптера. После того, как у вас есть ссылка и требуемые огни щелчка, вызовите getActivity() по ссылке в диалоговом окне, чтобы получить ссылку на эту активность. Затем вы можете делать все, что хотите в своей деятельности. Кроме того, я предлагаю вам внедрить прослушиватели с использованием интерфейсов. То, что вы хотите сделать, - сохранить DialogFragment невидимым для основного действия и вашего адаптера, слабо связанного с DialogFragment, и в этом случае интерфейсы помогут.

+0

Спасибо. Означает ли это, что в 'onCreateDialog' я передаю' this' в конструктор 'Adapter'? – Jonas

+0

Это был бы один из способов сделать это. То, что вы также можете сделать, - это сделать вашу деятельность реализацией интерфейса прослушивателя и передать вашу активность, поданную слушателю, используя ((Listener) getActivity()) вместо передачи этого (например, диалогового окна). Таким образом, вы можете напрямую вызвать активность из адаптера. – androholic

+0

Спасибо за предложение. Всегда полезно учиться на альтернативах. Я думаю, что я пойду для подхода pass-the-fragment, потому что таким образом, «DialogFragment» имеет шанс закрыть себя. – Jonas

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