2016-09-23 116 views
2

所以這個場景是我不想從片段中添加一個對象到RecyclerView,我知道該怎麼做。但是,數據在添加對象時不顯示。這裏是我的代碼:Android - 我的RecyclerView數據不顯示

ListAdapter:

public class ListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

public static final int ITEM_TYPE_NOTE = 0; 
public static final int ITEM_TYPE_CATEGORY = 1; 

private Context mContext; 
private List<ObjectModel> mList; 

public ListAdapter(Context context, List<ObjectModel> list) { 
    mContext = context; 
    mList = list; 
} 

@Override 
public int getItemViewType(int position) { 
    return position % 2 * 2; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View noteView = LayoutInflater.from(parent.getContext()).inflate(R.layout.note_list_item, parent, false); 
    View categoryView = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_list_item, parent, false); 

    switch (viewType) { 
     case ITEM_TYPE_NOTE: 
      return new NoteViewHolder(noteView); 
     case ITEM_TYPE_CATEGORY: 
      return new CategoryViewHolder(categoryView); 
    } 
    return null; 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    switch (holder.getItemViewType()) { 
     case ITEM_TYPE_NOTE: 
      NoteViewHolder noteViewHolder = (NoteViewHolder) holder; 
      noteViewHolder.bindNote((Note) mList.get(position)); 
      break; 
     case ITEM_TYPE_CATEGORY: 
      CategoryViewHolder categoryViewHolder = (CategoryViewHolder) holder; 
      categoryViewHolder.bindCategory((Category) mList.get(position)); 
      break; 
    } 
} 

@Override 
public int getItemCount() { 
    return 0; 
} 

class NoteViewHolder extends RecyclerView.ViewHolder 
     implements View.OnClickListener { 

    public ImageView mNoteListItemImage; 
    public TextView mNoteListItemText; 
    public ImageView mDeleteNoteImage; 

    public NoteViewHolder(View itemView) { 
     super(itemView); 

     mNoteListItemImage = (ImageView) itemView.findViewById(R.id.NoteListItemImage); 
     mNoteListItemText = (TextView) itemView.findViewById(R.id.NoteListItemText); 
     mDeleteNoteImage = (ImageView) itemView.findViewById(R.id.DeleteNoteImage); 

     itemView.setOnClickListener(this); 
    } 

    public void bindNote(Note note) { 
     mNoteListItemText.setText(note.getTitle()); 
    } 

    @Override 
    public void onClick(View view) { 

    } 
} 

主要活動:

​​

編輯5 - 禁用即時運行,並得到這個:

09-28 10:54:22.725 9992-9992/com.x.x E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: com.x.x, PID: 9992 
                   java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.x.x.items.Note.getTitle()' on a null object reference 
                    at com.x.x.adapters.ListAdapter$NoteViewHolder.bindNote(ListAdapter.java:88) 
                    at com.x.x.adapters.ListAdapter.onBindViewHolder(ListAdapter.java:56) 
                    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5471) 
                    at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5504) 
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4741) 
                    at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617) 
                    at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994) 
                    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390) 
                    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353) 
                    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574) 
                    at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3028) 
                    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2906) 
                    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3283) 
                    at android.view.View.layout(View.java:15654) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4969) 
                    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1077) 
                    at android.view.View.layout(View.java:15654) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4969) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
                    at android.view.View.layout(View.java:15654) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4969) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1705) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1559) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1468) 
                    at android.view.View.layout(View.java:15654) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4969) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
                    at android.view.View.layout(View.java:15654) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4969) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1705) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1559) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1468) 
                    at android.view.View.layout(View.java:15654) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4969) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:508) 
                    at android.view.View.layout(View.java:15654) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4969) 
                    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2102) 
                    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1859) 
                    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1078) 
                    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5875) 
                    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
                    at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
                    at android.view.Choreographer.doFrame(Choreographer.java:550) 
                    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
                    at android.os.Handler.handleCallback(Handler.java:739) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:135) 
                    at android.app.ActivityThread.main(ActivityThread.java:5351) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:372) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703) 

請幫幫忙!

更新:

這是怎麼了我傳遞信息到我的列表 -

在您創建一個新的筆記我的片段,有兩個EditTexts。然後來自EditTexts的信息被傳遞給MainActivity。

@Override 
public void onClick(View v) { 
    if (v == mConfirmImageNN) { 
     String titleText = mNoteTitleEdit.getText().toString(); 
     String descriptionText = mNoteDescriptionEdit.getText().toString(); 

     // Display an error if both EditTexts are empty 
     if (v == mConfirmImageNN && titleText.equals("")) { 
      noteError(); 
     } else if (v == mConfirmImageNN && descriptionText.equals("")){ 
      noteError(); 
     } else { 
      // Create note otherwise 
      Note note = new Note(titleText, descriptionText); 
      goBackNote(note); 
     } 
    } 

    // Go back to MainActivity with no info 
    if (v == mCancelImageNN) { 
     goBackNone(); 
    } 
} 

// Go back to MainActivity 
private void goBackNote(Note note) { 
    Intent intent = new Intent(getActivity(), MainActivity.class); 
    intent.putExtra(getString(R.string.note), (Serializable) note); 
    startActivity(intent); 
} 

// With nothing 
private void goBackNone() { 
    Intent intent = new Intent(getActivity(), MainActivity.class); 
    startActivity(intent); 
} 

我使用一個包檢索信息。

Bundle bundle = getIntent().getExtras(); 
mNote = (Note) bundle.getSerializable(getString(R.string.note)); 

然後我將它添加到我的列表中。

mList.add(mNote); 

在一個側面說明,這是我如何初始化我的列表。

private List<ObjectModel> mList = new ArrayList<>(); 

ObjectModel。

public class ObjectModel { 
Note mNote; 
Category mCategory; 
} 
+0

你'getItemCount'返回0應該是'返回mList.size( )' – Raghunandan

+0

禁用即時運行並嘗試加載 – Eenvincible

回答

0

我覺得你有錯誤

@Override 
public int getItemViewType(int position) { 
    return position % 2 * 2; 
} 

這裏您允許的項目與ViewType = 0,1和2。你正在返回如果你得到一個值不同於0或1.

記住運算符如何處理優先級。

position % 2 * 2 

將EVAL一樣

(position % 2) * 2 

我想你想要的這裏是一樣的東西

@Override 
public int getItemViewType(int position) { 
    return position % 2; 
} 

此外,要覆蓋getItemCount法值0,這意味着RecyclerView上沒有任何項目,因此沒有任何東西會顯示在那裏。

@Override 
public int getItemCount() { 
    return 0; 
} 

改變零值與列表,其大小類似

... 
private List<Items> items; 
... 
@Override 
public int getItemCount() { 
    return items.size(); 
} 
+0

雖然應用程序運行時沒有錯誤,但li上仍然沒有顯示任何內容ST。 –

+0

等一下,我好像現在正在收到一個錯誤。我將編輯帖子。 –

+0

好像你的列表中有空元素,你是否用調試器檢查過它? –

0
@Override 
public int getItemCount() { 
    return 0; 
} 

@Override 
public int getItemCount() { 
    return mList.size(); 
}