Home > Blockchain >  RecyclerView displaying only first index of three
RecyclerView displaying only first index of three

Time:01-18

i have a weird problem, I am trying to create a simple app, but i got stuck with recycleview and displaying items. My problem is that i get only one text from the total three. getItemCount() says that i have 3 items ... so i don't know why i get display of only 1 instead of 3 ...

MainActivity:

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));
    }


}

RecyclerView:

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);
        }
    }
}

LOGS: 2022-01-17 18:30:12.369 10336-10336/com.example.myapplication I/taozen: size: 3 2022-01-17 18:30:12.375 10336-10336/com.example.myapplication I/taozen: A simple note

And this are the items:

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;
    }
}

Update! It seems that when i get index 1 in my adapter i get the correct value, for example:

@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());

    }

So the problem can be in my onBindViewHolder ?

CodePudding user response:

Check your recycler view Item list_item height.

make it wrap_content if it's set to match_parent.

CodePudding user response:

Could you post xml code please?

I think the problem can be that in

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());

}

because you are passing only one integer but I cannot try without code

  •  Tags:  
  • Related