Android-我的RecyclerView数据未显示



因此,场景是我不想从片段向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) {
    }
}

主要活动:

public class MainActivity extends AppCompatActivity {
private ImageView mAddItemImage;
private RecyclerView mRecyclerView;
private Note mNote;
private List<ObjectModel> mList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mAddItemImage = (ImageView) findViewById(R.id.AddItemImage);
    mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    mAddItemImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startNewItemActivity();
        }
    });
    Intent intent = getIntent();
    mNote = (Note) intent.getSerializableExtra(getString(R.string.note));
    mList.add(mNote);
    ListAdapter listAdapter = new ListAdapter(this, mList);
    mRecyclerView.setAdapter(listAdapter);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(layoutManager);
    mRecyclerView.setHasFixedSize(true);
}

EDIT 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)

请帮忙!

更新:

这就是我如何将信息传递到我的列表-

在我创建新注释的片段中,有两个EditText。EditText中的信息随后被传递到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;
}
@Override
public int getItemCount() {
    return 0;
}

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

我认为您有两个错误

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

在这里,您允许ViewType=0、1和2的项目。如果得到的值不同于0或1,则返回null

记住运算符如何处理优先级。

position % 2 * 2 

将评估与相同

(position % 2) * 2

我想你想要的是类似的东西

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

此外,您正在使用值0重写getItemCount方法。这意味着RecyclerView上没有任何项目,因此不会在那里渲染任何内容。

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

使用类似的列表及其大小更改零值

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

最新更新