固定 3-5 項,無需滾動,項目佈局相同。
| 維度 | 重複布局 (LinearLayout + include) | ListView (setNestedScrollingEnabled(false)) |
|---|---|---|
| 代碼量 | XML 重複或 include,Java 手動 findView | Adapter 復用,數據驅動 |
| 性能 | 極佳(無遞歸渲染、無滾動邏輯) | 略高開銷(Adapter、ViewHolder、測量布局) |
| 維護性 | 差(修改項目佈局需改多處/改 include) | 好(單一 Item 佈局,邏輯集中) |
| 動態增減 | 麻煩(動態 inflate/addView) | 天然支持 (notifyDataSetChanged) |
| 點擊事件 | 各自 setOnClickListener | setOnItemClickListener 統一 |
| 內存 | 常駐所有 View | 同(不回收,項目少可忽略) |
RecyclerView rv = findViewById(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setNestedScrollingEnabled(false); // 禁用滾動
rv.setHasFixedSize(true); // 項目高度固定優化
rv.setAdapter(new SimpleAdapter(items));
RecyclerView 替代 ListView,API 更清晰,支持動畫、ItemDecoration、靈活佈局管理器。
<!-- item_layout.xml -->
<LinearLayout ...>
<TextView android:id="@+id/tvTitle" />
<TextView android:id="@+id/tvDesc" />
</LinearLayout>
<!-- 主佈局 -->
<LinearLayout android:orientation="vertical">
<include layout="@layout/item_layout" android:id="@+id/item1" />
<include layout="@layout/item_layout" android:id="@+id/item2" />
<include layout="@layout/item_layout" android:id="@+id/item3" />
</LinearLayout>
<!-- Java 統一綁定 -->
View item1 = findViewById(R.id.item1);
bindItem(item1, data1);
View item2 = findViewById(R.id.item2);
bindItem(item2, data2);
// ...
private void bindItem(View item, Data data) {
((TextView)item.findViewById(R.id.tvTitle)).setText(data.title);
((TextView)item.findViewById(R.id.tvDesc)).setText(data.desc);
item.setOnClickListener(v -> handleClick(data));
}
3-5 固定項、邏輯異、極簡場景 → 重複布局 + `include` + 統一綁定方法。
其餘所有場景 → RecyclerView (禁用滾動)。
現代開發默認選 RecyclerView,除非有極強理由不用。