使用自定義佈局 mytext.xml 作為 ArrayAdapter 項目佈局時,代碼寫 android.R.layout.mytext 導致編譯錯誤「找不到符號」。原因:android.R 是系統資源,自項目資源在 R.layout (包名.R)。
// ❌ 錯誤:android.R.layout 只有系統內置佈局 (simple_list_item_1 等)
ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.mytext, historyList);
// ✅ 正確:項目資源在 com.example.myapp.R.layout.mytext
// 確保導入了項目包名的 R 類,而非 android.R
import com.example.myapp.R; // 你的包名
ArrayAdapter adapter = new ArrayAdapter<>(this, R.layout.mytext, historyList);
public class HistoryActivity extends AppCompatActivity {
private ListView listView;
private List historyList = Arrays.asList("記錄1", "記錄2", "記錄3");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
listView = findViewById(R.id.listView);
// 關鍵:使用 R.layout.mytext (項目資源)
ArrayAdapter adapter = new ArrayAdapter<>(
this,
R.layout.mytext, // 這裡!
historyList
);
listView.setAdapter(adapter);
}
}
// 佈局 res/layout/item_history.xml
// 自定義 Adapter
public class HistoryAdapter extends ArrayAdapter {
public HistoryAdapter(Context context, List items) {
super(context, R.layout.item_history, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_history, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String item = getItem(position);
holder.title.setText(item);
holder.time.setText(new SimpleDateFormat("HH:mm").format(new Date()));
return convertView;
}
static class ViewHolder {
TextView title, time;
ImageView icon;
ViewHolder(View v) {
title = v.findViewById(R.id.title);
time = v.findViewById(R.id.time);
icon = v.findViewById(R.id.icon);
}
}
}
| 導入語句 | 含義 | 能訪問 mytext.xml? |
|---|---|---|
import android.R; | 系統框架資源 | ❌ 否 |
import com.example.myapp.R; | 項目應用資源 | ✅ 是 |
import com.example.myapp.databinding.R; | ViewBinding 生成類 (不同) | ❌ 否 |
android.R,手動修正為項目包名。Build → Clean Project → Rebuild Project 刷新 R 類。
3. 檢查資源文件名:小寫字母、下劃線、無中文、無保留字。
4. 現代開發用 ViewBinding:ItemHistoryBinding.inflate(inflater) 類型安全、無 R 類導入煩惱。
核心原則:自項目資源永遠在 包名.R,系統資源在 android.R。這是 Android 資源系統的基石區分。