setHasFixedSize()
方法用于告訴 RecyclerView 其大小是否固定
setHasFixedSize(true)
。例如:RecyclerView recyclerView = findViewById(R.id.recycler_view);
MyAdapter adapter = new MyAdapter();
adapter.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
getItemViewType()
方法,并為每個視圖類型分配一個唯一的 ID。這將有助于檢查 RecyclerView 是否正確地復用視圖。例如:@Override
public int getItemViewType(int position) {
return position % 2 == 0 ? VIEW_TYPE_EVEN : VIEW_TYPE_ODD;
}
onCreateViewHolder()
方法中,根據視圖類型創建不同的 ViewHolder。例如:@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
if (viewType == VIEW_TYPE_EVEN) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.even_item, parent, false);
} else {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.odd_item, parent, false);
}
return new MyViewHolder(view);
}
onBindViewHolder()
方法中,根據位置設置不同的數據。例如:@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
if (position % 2 == 0) {
// 設置偶數項的數據
} else {
// 設置奇數項的數據
}
}
setHasFixedSize()
生效,那么 RecyclerView 應該能夠正確地復用視圖,從而提高性能。你可以通過在 onCreateViewHolder()
和 onBindViewHolder()
方法中添加日志輸出來觀察視圖的創建和綁定過程。如果 RecyclerView 的行為符合預期,那么說明 setHasFixedSize()
生效了。如果仍然存在性能問題或者視圖沒有被正確復用,那么可能需要進一步檢查代碼以找到問題所在。