2017-06-22 9 views
-3

投稿のタイムスタンプに従って投稿を並べ替えたいです。投稿にはタイトルと説明が含まれています。データを取得するためにfirebaseを使用しています。しかし、ビューアホルダーには何も表示されません。ビューの所有者は空白です。私が間違っていることは何ですか?ViewHolderがデータを表示していません

public class AlertsActivity extends AppCompatActivity { 
    public static class BlogViewHolder extends RecyclerView.ViewHolder { 
     View mview; 
     public BlogViewHolder(View itemView) { 
      super(itemView); 
      mview = itemView; 
     } 

     public void setTitle(String title) { 
      TextView post_title = (TextView)mview.findViewById(R.id.blog_title); 
      post_title.setText(title); 

     } 

     public void setDesp(String desp) { 
      TextView post_desp = (TextView) mview.findViewById(R.id.blog_desp); 
      post_desp.setText(desp); 
     } 


     public void setTimestampCreated(HashMap<String, Object> timestamp) { 
      TextView show_ts = (TextView) mview.findViewById(blog_timestamp); 
      show_ts.setText(String.valueOf(timestamp)); 
     } 
    } 

アダプタ:データベースの

 mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 
     mDatabase.keepSynced(true); 
     mDatabase.orderByChild("timestamp");   

     FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new 
      FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
        Blog.class, 
        R.layout.blog_row, 
        BlogViewHolder.class, mDatabase) { 
       @Override 
       protected void populateViewHolder(final BlogViewHolder viewHolder, final Blog model, int position) { 
        mDatabase.child("Blog").orderByChild("timestamp").addValueEventListener(new ValueEventListener() { 

         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 
          String alerts = dataSnapshot.getValue(String.class); 
          HashMap<String, Object> time = (HashMap<String, Object>) dataSnapshot.getValue(); 
          viewHolder.setTitle(alerts); 
          viewHolder.setDesp(alerts); 
          viewHolder.setTimestampCreated(time); 
         } 


         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        }); 
       } 
      }; 
    mbloglist.setAdapter(firebaseRecyclerAdapter); 
    } 

画像: https://i.stack.imgur.com/GNouK.png

+0

*は、私が間違っているのは何があります* **質問です:それは何がありますあなたはそれを正しくしています** ...決して使用されていない非同期タスクのonProgressUpdateの中にアダプタを作成しています。コードは整形されておらず、クリアではありません。 – Selvin

+0

@Selvin私は非同期タスクを使用しているので、 。はい、私は必要な部分のみを示しています。これは完全なコードではありません –

+0

*私は必要とされる重要な部分のみを示しており、感覚を作りません – Selvin

答えて

0

あなたのコードは、このようなシンプルな構造のためにあまりにも複雑に見えます。 FirebaseUIからアダプタを使用する主な目的は、リスナを自分で処理する必要がないようにすることです。私の知る限り見ることができるように、あなただけの必要があります。

mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 
Query orderedBlogs = mDatabase.orderByChild("timestamp");   

FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new 
     FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
       Blog.class, 
       R.layout.blog_row, 
       BlogViewHolder.class, orderedBlogs) { 
    @Override 
    protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) { 
     viewHolder.setTitle(blog.title); 
     viewHolder.setDesp(blog.desp); 
     viewHolder.setTimestampCreated(blog.timestamp); 
    } 
}; 
mbloglist.setAdapter(firebaseRecyclerAdapter); 

これは、対応する最小限のBlogクラスです:?

public class Blog { 
    public String desp; 
    public long timestamp; 
    public string title; 
} 
+0

まだ同じですが! LinearLayoutManager mLayoutManager = new LinearLayoutManager(AlertsActivity.this);このLinearLayoutManagerを使用しなければならなかったすべての組み合わせを検索して試してみました。 mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true);それは何らかの理由でorderbychild()を使用して動作していません! –

+0

そのコードはレイアウトを逆転させます。アイテムが表示されるかどうかには違いはありません。これは、最初の投稿では起こらないことです。 –

+0

ああ!私はあなたのコードを試した後に項目が表示されていることを言及することを忘れてしまった。私はorderbychild()を使った後でさえ、データがソートされていないということについて話していました。だから私は逆のレイアウトのものを使用しなければならなかった。私の悪い! @Frank van Puffelen –

関連する問題