为什么onBindViewHolder索引在Recycler View中不增加?

时间:2019-03-01 08:44:16

标签: java android android-recyclerview

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

<?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>

activity_main.xml

 

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


    

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>

在myAdapter.java文件中,onBindViewHolder索引没有增加。请帮助我。

2 个答案:

答案 0 :(得分:0)

视图持有者中的视图项目占据了整个布局高度。请改用“ wrap_content”。对于sample_post.xml中的父级LinearLayout,请使用android:layout_height = "wrap_content"

答案 1 :(得分:0)

这是我在适配器上遇到的问题。建议使用ViewHolder的import re def remove_parentheses(s): s = re.sub("\(.{1,25}\)", "", s) return s 方法来获取最新的索引。对于您来说,获取索引将是getAdapterPosition()