简体   繁体   English

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

[英]Why onBindViewHolder index isn't incrementing in Recycler View?

infoOfPost.java 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主活动.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活动_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样本_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.在 myAdapter.java 文件中,onBindViewHolder 索引没有增加。 Please Help me.请帮我。

The view item in your view holder is taking up the entire layout height.视图持有者中的视图项占据了整个布局高度。 Use "wrap_content" instead.改用“wrap_content”。 For the parent LinearLayout in sample_post.xml please use android:layout_height = "wrap_content"对于 sample_post.xml 中的父 LinearLayout 请使用android:layout_height = "wrap_content"

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.建议使用 ViewHolder 的getAdapterPosition()方法来获取更新的索引。 For you it will be myViewHolder.getAdapterPosition() to get an index.对您而言,将是myViewHolder.getAdapterPosition()来获取索引。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM