2016-02-19 132 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我thod工程。我使用它时,第一项被添加到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中的内容可见,进度对话框也不会消失。有没有解决方法?我正在使用FirebaseUI库中的FirebaseRecyclerAdapter。 –

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

};