初始化变量遇类型不兼容错误:ListView与List<Absensi>匹配问题
解决ListView初始化类型不兼容错误
错误根源
你遇到的Incompatible types. Found: 'android.widget.ListView', required: 'java.util.List<Absensi>'错误,核心问题是把界面控件ListView和数据集合List
list_absensi是用来存储Absensi数据的集合类型findViewById(R.id.ListAbsensi)返回的是界面上的ListView控件实例
这是完全不同的两种类型,不能互相赋值,强制转换只会引发更多错误。
解决步骤与修正代码
1. 正确定义变量
在Activity中分别定义数据集合和ListView控件变量:
// 存储Absensi数据的集合 private List<Absensi> list_absensi = new ArrayList<>(); // 界面上的ListView控件 private ListView lv_absensi;
2. 正确初始化
在Activity的onCreate方法中分别初始化数据集合和ListView:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity_layout); // 替换为你的Activity布局文件名 // 初始化ListView控件 lv_absensi = findViewById(R.id.ListAbsensi); // 初始化数据集合(这里替换为你的查询逻辑,加载Absensi数据) // list_absensi = 你的数据查询方法(); }
3. 绑定Adapter到ListView
当你获取到查询结果(填充list_absensi后),创建Adapter并绑定到ListView:
// 初始化Picasso实例 Picasso picasso = Picasso.get(); AbsensiAdapter adapter = new AbsensiAdapter(this, R.layout.list_absensi, list_absensi, picasso); lv_absensi.setAdapter(adapter);
4. 修正Adapter中的显示错误
你的AbsensiAdapter存在明显bug:所有TextView都用absensis.get(pos).getID()填充内容,导致日期、班级等信息都显示ID,需修正为对应字段:
@Override public View getView(final int pos, View convertview, ViewGroup parent){ LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.list_absensi, parent, false); TextView txtabsenID = rowView.findViewById(R.id.txtAViewId); TextView txtasbsenTanggal = rowView.findViewById(R.id.txtAViewTanggal); TextView txtasbsenKelas = rowView.findViewById(R.id.txtAViewKelas); TextView txtasbsenGuru = rowView.findViewById(R.id.txtAViewGuru); // 修正字段赋值 txtabsenID.setText(String.format("id : %s", absensis.get(pos).getID())); txtasbsenTanggal.setText(String.format("Tanggal : %s", absensis.get(pos).getTanggal())); txtasbsenKelas.setText(String.format("Kelas : %s", absensis.get(pos).getKelasName())); txtasbsenGuru.setText(String.format("Guru : %s", absensis.get(pos).getGuruName())); rowView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(context, AbsensiDetailActivity.class); intent.putExtra("absensi_id", String.valueOf(absensis.get(pos).getID())); intent.putExtra("absensi_tanggal", absensis.get(pos).getTanggal()); intent.putExtra("absensi_kelas", absensis.get(pos).getKelasName()); intent.putExtra("absensi_guru", absensis.get(pos).getGuruName()); context.startActivity(intent); } }); return rowView; }
额外说明
- ListView是Android的界面控件,负责展示列表;List
是数据容器,负责存储要展示的数据 - Adapter的作用是将数据集合中的数据映射到ListView的每一个列表项上,是连接数据和界面的桥梁
内容的提问来源于stack exchange,提问作者Caelles Kharida
相关产品推荐
相关产品推荐

