2016-04-10 2 views
0

В моем RecyclerView.ViewHolder я хочу проверить, есть ли сеть и отобразить индикатор выполнения, если он возвращает true.Как предоставить параметр контекста RecyclerView.ViewHolder

Я использую этот класс для проверки сетевого подключения:

public class NetworkCheck { 

    public static boolean isAvailableAndConnected(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     boolean isNetworkAvailable = cm.getActiveNetworkInfo() != null; 
     boolean isNetWorkConnected = isNetworkAvailable && cm.getActiveNetworkInfo().isConnected(); 

     return isNetWorkConnected; 

    } 

} 

Тогда в RecyclerView.ViewHolder я это делаю:

public static class ProgressViewHolder extends RecyclerView.ViewHolder { 
     Button loadButton; 
     ProgressBar progressBar; 
     public ProgressViewHolder(View footerView){ 
      super(footerView); 
      loadButton = (Button) footerView.findViewById(R.id.reload_button); 
      progressBar = (ProgressBar) footerView.findViewById(R.id.progress_load); 

      if(NetworkCheck.isAvailableAndConnected(Context)) { 
       loadButton.setVisibility(View.VISIBLE); 

      } 
     } 
    } 

В строке if(NetworkCheck.isAvailableAndConnected(Context)) { Android-студия красно-подчеркнуты Context с сообщение: «Ожидаемое выражение». Я пробовал context, getApplicationContext, getBaseContext, this, но ни один из них не работает.

Пожалуйста, где я ошибаюсь?

+0

Вашего держатель вида является статическим, так положить его в адаптере вы простирающийся, а затем передать контекст вы использовали для раздувания этого держателя –

ответ

0

вы можете retrive контекста с помощью объекта footerView:

public static class ProgressViewHolder extends RecyclerView.ViewHolder { 
       //... 
       public ProgressViewHolder(View footerView){ 
        if(NetworkCheck.isAvailableAndConnected(footerView.getContext())) { 
         // Do stuff 

       } 
      } 
2

getContext доступен только для деятельности, фрагментов или видов.

В вашем случае вы должны просто использовать свой itemView, переданный вашему владельцу.

Используйте footerView.getContext или itemView.getContext, чтобы позвонить методу примера View.

+0

Можете ли вы, пожалуйста, показать мне пример? – X09

+1

Просто добавьте круглые скобки к одному из двух примеров в последнем абзаце, чтобы вызвать функцию и получить контекст ... –

+0

Спасибо, это сработало – X09

0

Как вы знаете, нужны Context объекта inflate ваших itemView и создать держатели в onCreateViewHolder методы Так держать экземпляр в адаптере, таким образом, у вас есть ссылка на Context объект каждый раз, когда вам это нужно, что-то вроде этого:

public class Adapter extends RecyclerView.Adapter<Adapter.ProgressViewHolder> { 
     Context mContext //you need this to inflate views 
     public Adapter(Context context, arguments you need...) { 
       mContext = context; //here you keep an reference to Context object 
       ... 
     } 
    ... 
    static class ProgressViewHolder extends RecyclerView.ViewHolder { 
    //your implementation 
    } 
}