2016-02-19 16 views
2

Я хочу отобразить вид загрузки, то есть неопределенный индикатор выполнения, пока я не загружу просмотр ресайклера с данными, извлеченными из Firebase. Мне нужно знать событие, которое будет запущено, как только Recycler View будет загружен данными.Загрузите представление перед загрузкой данных в представление Recycler

я расширил этот класс, и используется в качестве адаптера

https://github.com/mmazzarolo/firebase-recyclerview/blob/master/app/src/main/java/com/example/matteo/firebase_recycleview/FirebaseRecyclerAdapter.java

Мой расширенный класс

public class TrendingRecycler extends FirebaseRecyclerAdapter 
    <TrendingRecycler.ViewHolder, DataStuff> { 


public static class ViewHolder extends RecyclerView.ViewHolder { 

    TextView Data; 


    public ViewHolder(View view) { 
     super(view); 

     Data= (TextView) view.findViewById(R.id.text_card_trending); 
    } 
} 

public TrendingRecycler(Query query, Class<DataStuff> itemClass) { 
    super(query, itemClass); 
} 


@Override public TrendingRecycler.ViewHolder 
onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.trending_card_view, parent, false); 

    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(TrendingRecycler.ViewHolder holder, 
             int position) { 


    final DataStuff item = getItem(position); 
    holder.Data.setText(item.Data); 
    final Context context =holder.itemView.getContext(); 

    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Toast.makeText(MyApplication.getAppContext(), 
        item.Tags.toString(), Toast.LENGTH_LONG).show(); 
      TempShowStore.setDataStuff(item); 
      context.startActivity(
        new Intent(context, ShowComplete.class) 
      ); 
     } 
    }); 
} 

@Override 
protected void itemAdded(DataStuff item, String key, int position) { 
    Log.d("ADDED",String.valueOf(position)); 
} 

@Override 
protected void itemChanged(DataStuff oldItem, DataStuff newItem, String key, int position) { 
    Log.d("CHANGED",String.valueOf(position)); 
} 

@Override 
protected void itemRemoved(DataStuff item, String key, int position) { 
    Log.d("REMOVED",String.valueOf(position)); 
} 

@Override 
protected void itemMoved(DataStuff item, String key, int oldPosition, int newPosition) { 
    Log.d("MOVED",String.valueOf(oldPosition) + " to " +String.valueOf(newPosition)); 
} 

} 
+0

Где вы заполняя данные в адаптер? Можете ли вы показать код? – Chol

ответ

1

Зарегистрируйте AdapterdataObserver к RecyclerView.Adapter

protected RecyclerView.AdapterDataObserver observer= new RecyclerView.AdapterDataObserver() { 
    @Override 
    public void onChanged() { 
     //called When the data in the adapter is changed 
    } 
}; 

yourAdapter.registerAdapterDataObserver(observer); 
+0

onChanged будет вызываться при изменении набора данных адаптера, но мне нужно знать, когда адаптер будет связываться с видом ресайклера. Извиняюсь, если я ошибаюсь. Я настоящий любитель. –

0

Я вычислял что onItemRangeInserted меня это работает. Я использую его, чтобы определить, когда первый пункт был добавлен в RecyclerView:

private void setupProgress() { 
    vProgress.show(); 
    mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 

     @Override 
     public void onItemRangeInserted(int positionStart, int itemCount) { 
      super.onItemRangeInserted(positionStart, itemCount); 
      vProgress.hide(); 
      mAdapter.unregisterAdapterDataObserver(this); 
     } 
    }); 
} 
+1

Это не работает для меня. Диалоговое окно «Прогресс» не исчезает даже при видимости содержимого в recyclerview. Есть ли обходной путь? Я использую FirebaseRecyclerAdapter из библиотеки FirebaseUI. –

+0

Это будет работать только в том случае, если у вас есть хотя бы 1 элемент, если нет предметов, то его не будут называть – htafoya

5

Вы должны попробовать перекрывая onDataChanged() в адаптере:

mProgressDialog.show(); 
mFirebaseAdapter = new FirebaseRecyclerAdapter(...) { 

@Override 
protected void populateViewHolder(...) {...} 

@Override 
protected void onDataChanged() { 
    if (mProgressDialog != null && mProgressDialog.isShowing()) { 
     mProgressDialog.dismiss(); 
    } 
    } 

}; 

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

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