代碼中 `findViewById(R.id.imagebstart)` 等導致 `NullPointerException`,且 `SimpleAdapter` 數據綁定異常,列表顯示空白或崩潰。
// 錯誤示範:dataList 重複添加導致數據疊加
public void setListAdpter(ListView mMusiclist, List mp3Infos) {
for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
// ... 構建 map
dataList.add(map); // 每次調用都往同一個全局 list 添加!
}
// ...
}
修正:`dataList` 應在方法內 `new ArrayList<>()`,或調用前 `clear()`。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 確保佈局正確
// 1. 初始化 TabHost
tabHost = findViewById(android.R.id.tabhost);
tabHost.setup();
addTabs(); // 添加標籤頁
// 2. 初始化播放控件(確保 ID 存在於 activity_main.xml)
playBtn = findViewById(R.id.imagebstart); // 不再註釋
// ... 其他按鈕
// 3. 初始化列表並設置 Adapter
songsList = findViewById(R.id.listSongs);
loadSongsData(); // 異步加載數據
}
private void loadSongsData() {
new Thread(() -> {
List mp3Infos = getMp3Infos("songs");
runOnUiThread(() -> {
// 每次構建新列表,避免數據疊加
List
`findViewById` 為 null 多因佈局/ID 不匹配;`SimpleAdapter` 易發生數據疊加。遵循「佈局優先、ID 核對、Adapter 局部化數據、異步加載」原則,可避開 90% 的坑。