iT邦幫忙

0

RecyclerView 如何讓每一組內容不一樣?(已解決)

我想要讓每一組RecyclerView顯示不一樣的圖片跟文字 就像下面演示一樣
我該如何做?

https://ithelp.ithome.com.tw/upload/images/20210710/20137519gDMCDPj06M.jpg

public class MainActivity extends AppCompatActivity {
    RecyclerView mRecyclerView;
    MyListAdapter myListAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRecyclerView=findViewById(R.id.recycleview);

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
      
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

        mRecyclerView.setAdapter( new MyListAdapter());

    }

    class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.ViewHolder>{

        class ViewHolder extends RecyclerView.ViewHolder{

            private ImageView imageView;
            private TextView textview;
            public ViewHolder(@NonNull View itemView) {
                super(itemView);
                imageView= itemView.findViewById(R.id.imageView);
                TextView=itemView.findViewById(R.id.text1);
            }
        }
        @NonNull
        @Override
        public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.recyle_item,parent,false);
            return new ViewHolder(view);
        }

        @Override  //從這裡面變更設定內容 引用holder.裡面 finID的資料修改
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
      
        }

        @Override  
        public int getItemCount() {
            return 8;
        }
    }
}

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="280dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="240dp"
        tools:ignore="MissingConstraints">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="260dp"
            android:layout_height="184dp"
            android:layout_centerHorizontal="true"
            app:srcCompat="@drawable/dog" />

        <TextView
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="text"
            android:layout_below="@+id/imageView"
            android:textSize="25dp"/>

  
    </RelativeLayout>
</RelativeLayout>

解決: 新增一個容器 然後容器中有排序[0]~[x]
在onBindViewHolder中
Text.setTest(str[position])

1 個回答

1
tw_hsu
iT邦新手 5 級 ‧ 2021-08-18 16:52:25
最佳解答

所以我討厭官方標準教程...看著那東西學習就是會跑出這種問題

你要先理解ListView的原理

首先要有一串格式穩定的資料。(要存放這一串資料,就必須要有Array或List,如果不知道這是什麼,另外用點功。)
這一串資料的長度/筆數就是getItemCount實際上要回傳的數值。

以你的問題來說
這一串資料中每一筆應該就是「文字,圖片檔案(連結或位置)」這樣的格式
(怎麼組合起來,就看你個人創意了。用一個物件?用兩組程度對稱的Array/List?)
然後onBindViewHolder中注意有個傳入的引數「position」
這是說「目前的這個ItemView將要對應到第幾筆的資料」
如果傳入0,那就是Array/List中的第0筆資料...以此類推,這個數字絕對不會大於getItemCount的數字

剩下的...就需要硬著頭皮去「感受」了
它的規則跟一般Activity/Fragment設定UI的方式在直覺上似乎有點相衝突,但這是「物件導向」會帶給人的混亂
硬著頭皮上吧!

我要發表回答

立即登入回答