3

私は、ViewPagerでアクションバータブを使用するタブ付きアクティビティに対して、Android Studio提供クラスを使用しています。このアクティビティの中で、私はFirebaseデータベースからのデータでRecyclerViewを初期化しようとしています。Firebase + RecyclerView:アプリケーション起動時にRecyclerViewが表示されない

問題:アプリケーションの最初の実行時に、RecyclerViewは次のように空になります。

App's first run.

私は閉じて、エミュレータ内からアプリケーションを再度開く場合は、それが必要として、以下のように、私のRecyclerViewは、読み込まれます。これが起こっかもしれない理由として

After closing and reopening app.

任意のアイデア?私は理論を持っていますが、解決策を見つけることができませんでした。 FragmentPagerAdapterのページを読んだ後、断片が静的でなければならないという印象を受けました(私はこのことの意味が分かりませんので、誰かがこれを理解できれば分かるでしょう)。アプリの最初の実行では、RecyclerViewが初期化されます。その後、Firebaseデータベースからデータを追加しますが、RecyclerViewはすでに初期化されているため、空であり、正しく更新されることはありません。 notify ...メソッドを無駄に呼び出すことを試みました。

StudentFragmentのonCreateView方法:

​​3210

ViewHolder:

public static class ViewHolder extends RecyclerView.ViewHolder { 
    public final TextView vFirst; 
    public final TextView vLast; 
    public final TextView vDue; 
    public final RadioButton vRadio; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     vFirst = (TextView) itemView.findViewById(R.id.recycler_main_text); 
     vLast = (TextView) itemView.findViewById(R.id.recycler_sub_text); 
     vRadio = (RadioButton) itemView.findViewById(R.id.recycler_radio_button); 
     vDue = (TextView) itemView.findViewById(R.id.recycler_due_text); 
} 

ホームスクリーンののonCreateメソッド:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_homescreen); 

    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 

} 

Firebaseコンテキストがホームスクリーンの活動とすぐに開始し、別のアプリケーションに設定されています開始する。どんな助けもありがとう。

編集:私はFirebaseUI GitHubページを掘り下げていましたが、これは問題が存在する可能性が最も高い場所であり、まったく同じ問題を抱えている別のユーザーが見つかりました。 onBindViewHolderは、FirebaseRecyclerAdapterクラスのnotifyItemInsertedの後に呼び出されないようです。今

+0

私はあなたと同じことをしようとしていますが、動作させることはできません。ここで私の問題はあなたがそれを見る時間がある場合に説明します。ありがとう! https://stackoverflow.com/questions/38263758/populateviewholder-not-executing-with-firebaserecycleradapter-android – raphh

答えて

0

がアプリケーションに表示されない

RecyclerViewが、そう

を開始し、あなたが質問のタイトルを言うように、私が試してみましょう...それを修正するにはRecyclerのビューとレイアウトマネージャを初期化します。

はONSTART

@Override 
    public void onStart() { 
     super.onStart(); 
     mFirebaseRef = new Firebase("<your Firebase link here>"); 
     firebaseRecyclerAdapter = ... 
     //and so on 

に宣言する必要があり、それがお役に立てば幸い!

+0

残念ながら、それは動作しませんでした – kevinivan05

0
firebaseRecyclerAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
     @Override 
     public void onItemRangeInserted(int positionStart, int itemCount) { 
      super.onItemRangeInserted(positionStart, itemCount); 
      int friendlyMessageCount = firebaseRecyclerAdapter.getItemCount(); 
      int lastVisiblePosition = 
        linearLayoutManager.findLastCompletelyVisibleItemPosition(); 
      // If the recycler view is initially being loaded or the 
      // user is at the bottom of the list, scroll to the bottom 
      // of the list to show the newly added message. 
      if (lastVisiblePosition == -1 || 
        (positionStart >= (friendlyMessageCount - 1) && 
          lastVisiblePosition == (positionStart - 1))) { 
       linearLayoutManager.scrollToPosition(positionStart); 
      } 
     } 
    }); 
    recyclerListIdeas.setAdapter(firebaseRecyclerAdapter); 

** Recyclerview.AdapterDataObserver()を追加するだけです。私のために働いた!それが役に立てば幸い:)**

0

私はドキュメントをチェック、同じ問題を持っていた:

https://codelabs.developers.google.com/codelabs/firebase-android/#6

は、データオブザーバを追加することによって、それを修正:私の場合は

mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
    @Override 
    public void onItemRangeInserted(int positionStart, int itemCount) { 
    super.onItemRangeInserted(positionStart, itemCount); 
    int friendlyMessageCount = mFirebaseAdapter.getItemCount(); 
    int lastVisiblePosition = 
      mLinearLayoutManager.findLastCompletelyVisibleItemPosition(); 
    // If the recycler view is initially being loaded or the 
    // user is at the bottom of the list, scroll to the bottom 
    // of the list to show the newly added message. 
    if (lastVisiblePosition == -1 || 
      (positionStart >= (friendlyMessageCount - 1) && 
        lastVisiblePosition == (positionStart - 1))) { 
     mMessageRecyclerView.scrollToPosition(positionStart); 
     } 
    } 
}); 
関連する問題