2017-10-14 66 views
0

我已經實現了RecyclerView顯示一些領域表數據。我已經通過從RealmRecyclerViewAdapter擴展來創建適配器。甚至認爲我在表中有3行(我通過結果調試進行檢查)沒有出現在列表中。我正在使用'io.realm:android-adapters:2.1.0'適配器和Realm 3.7.2爲什麼我的域回收視圖不顯示任何數據?

這是我的代碼。

適配器類。

public class UserListAdapter extends RealmRecyclerViewAdapter<User,UserListAdapter.ViewHolder> { 

    public UserListAdapter(@Nullable OrderedRealmCollection<User> data, boolean autoUpdate) { 
     super(data, autoUpdate); 
     setHasStableIds(true); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     View view = inflater.inflate(R.layout.user_list_layout, parent, false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     User user = getItem(position); 
     holder.home.setText(user.getUid()); 
     holder.name.setText(user.getName()); 
     holder.home.setText(user.getHouse().getName()); 
     if(user.isStatus()) { 
      holder.status.setText("Active"); 
     }else{ 
      holder.status.setText("Inactive"); 
     } 
    } 

    @Override 
    public long getItemId(int index) { 
     return getItem(index).getUid(); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     @BindView(R.id.column_id) 
     TextView id; 

     @BindView(R.id.column_name) 
     TextView name; 

     @BindView(R.id.column_house) 
     TextView home; 

     @BindView(R.id.status_button) 
     Button status; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 
      itemView.setOnClickListener(this); 
      status.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      if(v.getId() == R.id.status){ 
       //TODO: create interface and add method tho trigger when status click 
      }else{ 
       //TODO: create interface and add method tho trigger when item click 
      } 

     } 
    } 
} 

代碼段,用於設置適配器

try(Realm realm = Realm.getDefaultInstance()){ 
      RealmResults<User> users = realm.where(User.class).findAll(); 
      listAdapter = new UserListAdapter(users,true); 
      recyclerView.setAdapter(listAdapter); 
      recyclerView.addItemDecoration(new RecyclerViewDividerVertical(2)); 
      recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
} 

我能有CONVER RealmResults<User>ArrayList<User>和實施正常RecyclerView適配器和完成它。但據我所知,RealmRecyclerViewAdapter將導致數據更改時自動更新結果數據。但我也沒有100%清楚。任何人都可以解釋這是如何工作的?謝謝。

回答

0
try(Realm realm = Realm.getDefaultInstance()){ 
     RealmResults<User> users = realm.where(User.class).findAll(); 
     listAdapter = new UserListAdapter(users,true); 
     recyclerView.setAdapter(listAdapter); 
     recyclerView.addItemDecoration(new RecyclerViewDividerVertical(2)); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
} // <--- auto-close! 

如果關閉該領域實例,然後綁定到它的結果變得無效實施,RealmRecyclerViewAdapter檢查針對isValid(),因爲您已關閉領域,所以會返回false,因此它將以0元素數顯示。

請參閱UI線程的正確生命週期管理領域實例(onCreate()打開,onDestroy()關閉)in the documentation

1

看起來你的數據是無效的,並getItemCount()方法,在RealmRecyclerViewAdapter返回0

+1

你是對的。添加鏈接將有助於未來的讀者https://github.com/realm/realm-android-adapters/blob/master/adapters/src/main/java/io/realm/RealmRecyclerViewAdapter.java – Raghunandan

+0

請,我仍然不得到它。我應該在哪裏改變?以及如何在我的Adapter構造函數中使用OrderedRealmCollection Nullable以及示例中的那個不是。 –