簡體   English   中英

為什么 onBindViewHolder 索引在 Recycler View 中沒有增加?

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

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

主活動.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));
    }
}

我的適配器

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

活動_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>

樣本_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 索引沒有增加。 請幫我。

視圖持有者中的視圖項占據了整個布局高度。 改用“wrap_content”。 對於 sample_post.xml 中的父 LinearLayout 請使用android:layout_height = "wrap_content"

這是我在使用適配器時遇到的一個問題。 建議使用 ViewHolder 的getAdapterPosition()方法來獲取更新的索引。 對您而言,將是myViewHolder.getAdapterPosition()來獲取索引。

暫無
暫無

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

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