2016-02-19 133 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(); 
    } 
    } 

};