簡體   English   中英

RecyclerView 僅顯示三個的第一個索引

[英]RecyclerView displaying only first index of three

我有一個奇怪的問題,我正在嘗試創建一個簡單的應用程序,但我被 recycleview 和顯示項目卡住了。 我的問題是我從總共三個文本中只得到一個文本。 getItemCount() 說我有 3 個項目...所以我不知道為什么我只顯示 1 而不是 3...

主要活動:

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import com.example.myapplication.model.NoteEntity;
import com.example.myapplication.ui.NotesAdapter;
import com.example.myapplication.utilities.SampleData;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    @SuppressLint("NonConstantResourceId")
    @BindView(R.id.recyclerViewId) RecyclerView mRecyclerView;

    private List<NoteEntity> notesData = new ArrayList<>();
    private NotesAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);

        ButterKnife.bind(this);


        notesData.addAll(SampleData.getNotes());
        for (NoteEntity note: notesData) {
            Log.i(TAG, note.toString());
        }
        initRecyclerView();
    }

    private void initRecyclerView() {
        List<NoteEntity> entities = new ArrayList<>();
        entities.addAll(SampleData.getNotes());
        Log.i(TAG+"2", entities.toString());

        mAdapter = new NotesAdapter(entities, this);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    }


}

回收站視圖:

package com.example.myapplication.ui;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.myapplication.R;
import com.example.myapplication.model.NoteEntity;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

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

    private List<NoteEntity> mNotes;
    Context context;

    public NotesAdapter(List<NoteEntity> mNotes, Context context) {
        this.mNotes = mNotes;
        this.context = context;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
        View view = inflater.inflate(R.layout.list_item, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        //update
        NoteEntity note = mNotes.get(i);
        TextView textView = viewHolder.mTextView;
        textView.setText(note.getText());
        Log.i("taozen", note.getText());

    }

    @Override
    public int getItemCount() {
        Log.i("taozen", "size: " + mNotes.size());
        return mNotes.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.textView) TextView mTextView;
        @BindView(R.id.item_layout_id) LinearLayout linearLayout;
//        @BindView(R.id.btn_item) Button mButton;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }
}

日志:2022-01-17 18:30:12.369 10336-10336/com.example.myapplication I/taozen:大小:3 2022-01-17 18:30:12.375 10336-10336/com.example.myapplication I/taozen : 一個簡單的注釋

這是項目:

import java.util.GregorianCalendar;
import java.util.List;

public class SampleData{
    private static final String SAMPLE_TEXT_1 = "A simple note";
    private static final String SAMPLE_TEXT_2 = "A note with a\nline feed";
    private static final String SAMPLE_TEXT_3 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n" +
            "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?";

    private static Date getDate(int diff){
        GregorianCalendar cal = new GregorianCalendar();
        cal.add(Calendar.MILLISECOND, diff);
        return cal.getTime();
    }
    public static List<NoteEntity> getNotes(){
        List<NoteEntity> notes = new ArrayList<>();
        notes.add(new NoteEntity(1, getDate(0), SAMPLE_TEXT_1));
        notes.add(new NoteEntity(2, getDate(-1), SAMPLE_TEXT_2));
        notes.add(new NoteEntity(3, getDate(-2), SAMPLE_TEXT_3));
        return notes;
    }
}

更新,似乎當我在適配器中獲得索引 1 時,我得到了正確的值:例如:

@Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        //update
        NoteEntity note = mNotes.get(1);
        viewHolder.mTextView.setText(note.getText());
        Log.i("taozen", note.getText());

    }

所以問題可能出在我的 onBindViewHolder 上?

你能發布 xml 代碼嗎?

我認為問題可能在於

public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
    //update
    NoteEntity note = mNotes.get(i);
    TextView textView = viewHolder.mTextView;
    textView.setText(note.getText());
    Log.i("taozen", note.getText());

}

因為您只傳遞了一個 integer 但我無法嘗試沒有代碼

檢查您的回收站視圖項目列表_項目高度。

如果設置為 match_parent,則將其設為 wrap_content。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM