[英]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.