2015-08-06 1 views
3

я сделал сам ViewHolder в качестве своего OnClickListener:Как подключить ViewHolder RecyclerView и активность/фрагмент контейнера?

public class ListItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    ... 
    @Override 
    public void onClick(View view) { 
     ... 
    } 
} 

Теперь я могу обрабатывать событие щелчка элементов списка в деятельности/фрагмента. Тем не менее, я хочу дать «отзыв» этому элементу. Например, элемент списка содержит TextView и ProgressBar, при нажатии на него отобразится ProgressBar, и TextView скроется, а действие/фрагмент сделает что-то вроде HTTP-запроса. Когда запрос будет завершен, ProgressBar станет невидимым, а TextView снова появится. Как я могу сообщить ViewHolder элемента списка этого прогресса?

ответ

1

Простейшее путь пройти активность по созданию как этот

public class ListItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    Activity mActivity; 

    public ListItemViewHolder (Activity activity) { 
     mActivity = activity; 
    } 


    @Override 
    public void onClick(View view) { 

     } 
    } 
+0

Я не понимаю, как это решает вопрос. Не могли бы вы расширить свое предложение? – ErstwhileIII

+0

Я думаю, что это решение не так хорошо, как добавление ссылки на ViewHolder в действии. Но я хочу, чтобы активность связывалась с адаптером, а не напрямую с ViewHolder. – 7bitex

0

Просто используйте вид OnClick, чтобы получить ссылку. Пример:

@Override 
    public void onClick(View view) { 
     someText= (TextView) view.findViewById(R.id.someTextId); 
     someProgressBar= (ProgressBar) view.findViewById(R.id.someProgressBarId); 

     someText.setVisibility(View.GONE); 
    } 

Если вы хотите быть более конкретными, создать onClickListener нужного пункта

public void onBindViewHolder(final ViewHolder holder, final int position) { 
      final Someobject obj = objectList.get(position); 

     holder.vProgressBar.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // Do what you want, hide the text or whatever 
       } 
     }); 
    ... 
} 

Надеется, что это помогает!

+0

Вы должны использовать 'view.getRootView()' first –

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

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