0
votes

infoOfPost.java

 

    package com.sakib23.task1;

    public class infoOfPost {
        String UserName;
        String ProjectTitle, ProjectDescription, ProjectTime;
        boolean ProjectFlag;

        public infoOfPost(String userName, String projectTitle, String projectDescription, String projectTime, boolean projectFlag) {
            UserName = userName;
            ProjectTitle = projectTitle;
            ProjectDescription = projectDescription;
            ProjectTime = projectTime;
            ProjectFlag = projectFlag;
        }

        public String getUserName() {
            return UserName;
        }

        public void setUserName(String userName) {
            UserName = userName;
        }

        public String getProjectTitle() {
            return ProjectTitle;
        }

        public void setProjectTitle(String projectTitle) {
            ProjectTitle = projectTitle;
        }

        public String getProjectDescription() {
            return ProjectDescription;
        }

        public void setProjectDescription(String projectDescription) {
            ProjectDescription = projectDescription;
        }

        public String getProjectTime() {
            return ProjectTime;
        }

        public void setProjectTime(String projectTime) {
            ProjectTime = projectTime;
        }

        public boolean getProjectFlag() {
            return ProjectFlag;
        }

        public void setProjectFlag(boolean projectFlag) {
            ProjectFlag = projectFlag;
        }
    }
    

MainActivity.java


package com.sakib23.task1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    ArrayList<infoOfPost> arrayList;

    myAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.RecyclerViewID);
        arrayList = new ArrayList<>();

        arrayList.add(new infoOfPost("A B C", "B", "C", "01/02/12", true));
        arrayList.add(new infoOfPost("B A A", "B", "C", "06/02/12", true));
        arrayList.add(new infoOfPost("A B A", "B", "C", "01/03/12", false));
        arrayList.add(new infoOfPost("C A A", "B", "C", "02/03/12", false));
        arrayList.add(new infoOfPost("A A A", "B", "C", "01/09/12", true));
        arrayList.add(new infoOfPost("A L A", "B", "C", "11/12/12", false));

        adapter = new myAdapter(this, arrayList);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
    }
}

myAdapter.java

 

    package com.sakib23.task1;

    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.TextView;
    import android.widget.Toast;

    import java.util.ArrayList;

    public class myAdapter extends RecyclerView.Adapter {

        Context context;
        ArrayList arrayList;

        public myAdapter(Context context, ArrayList arrayList) {
            this.context = context;
            this.arrayList = arrayList;
            Log.d("TAGG", "Total Size: " + arrayList.size()); // Okay it is fine.

        }

        @NonNull
        @Override
        public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(context).inflate(R.layout.sample_post, viewGroup, false);
            return new MyViewHolder(view);
        }

        @Override
        public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
            Log.d("TAGG", "index " + i); // it is not incrementing
            myViewHolder.userName.setText(arrayList.get(i).getUserName());
            myViewHolder.projectTitle.setText(arrayList.get(i).getProjectTitle());
            myViewHolder.projectDescription.setText(arrayList.get(i).getProjectDescription());
            myViewHolder.projectTime.setText(arrayList.get(i).getProjectTime());
            if(arrayList.get(i).getProjectFlag() == false)
                myViewHolder.projectFlag.setText("Not Flagged Post");
             else myViewHolder.projectFlag.setText("Flagged Post");
        }

        @Override
        public int getItemCount() {
            Log.d("TAGG",   " GETSIZE " + arrayList.size()  ); // it is also fine..
            return arrayList.size();
        }

        class MyViewHolder extends RecyclerView.ViewHolder {
            TextView userName, projectTitle, projectDescription, projectTime, projectFlag;
            public MyViewHolder(@NonNull View itemView) {
                super(itemView);

                userName = itemView.findViewById(R.id.usernameID);
                projectTitle = itemView.findViewById(R.id.projecttitleID);
                projectDescription = itemView.findViewById(R.id.projectdesriptionID);
                projectTime = itemView.findViewById(R.id.projecttimeID);
                projectFlag = itemView.findViewById(R.id.projectflagID);
            }
        }
    }


    

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <android.support.v7.widget.RecyclerView

        android:id="@+id/RecyclerViewID"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v7.widget.RecyclerView>
</LinearLayout>

sample_post

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="UserName"
        android:id="@+id/usernameID"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ProjectTitle"
        android:id="@+id/projecttitleID"
        />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ProjectDescription"
        android:id="@+id/projectdesriptionID"
        />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ProjectTime"
        android:id="@+id/projecttimeID"
        />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Flag"
        android:id="@+id/projectflagID"
        />
</LinearLayout>

Here in the myAdapter.java file, onBindViewHolder index is not increasing. Please Help me.

2
can u see your items by vertically scrolling?Lorence Hernandez
Yes. i oriented vertically . i edited the post. You can now also see the xml files..sk23
First thing Swap These two lines . recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this)); .. Then Check.ADM
try scrolling your screen if you can see the other item of the recyclerview.Lorence Hernandez
okay. I got the bug. in sample_post.xml. I should've written,layout_height="wrap_content".. thanks everyone....sk23

2 Answers

0
votes

The view item in your view holder is taking up the entire layout height. Use "wrap_content" instead. For the parent LinearLayout in sample_post.xml please use android:layout_height = "wrap_content"

0
votes

This has been a problem I've experienced with adapters. Recommendation is to use the ViewHolder's getAdapterPosition() method to obtain a more up to date index. For you it will be myViewHolder.getAdapterPosition() to get an index.