2017-06-22 52 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的異步任務,這是從來沒有使用過的,你的代碼不是格式化,並且cleary不完整 – 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); mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true);由於某種原因,使用orderbychild()並不能解決問題! –

+0

該代碼只是顛倒了佈局。它是否顯示出物品沒有什麼區別,這是你最初的帖子所說的不會發生的。 –

+0

哦!只是忘記提到,我試過你的代碼後,項目顯示。即使在使用orderbychild()之後,我也在討論數據沒有按照排序順序。所以我不得不使用相反的佈局。我的錯! @Frank van Puffelen –