自定义ArrayAdapter适配ListView报错,Android代码求助
解决ListView加载Publikasi对象时的错误问题
看起来你在给ListView绑定Publikasi数据列表时踩坑了😅,我先把你提供的代码补全格式化,再梳理常见的出错点和修复方案。
首先补全并格式化你的代码(修复了截断的MODE_PRIVATE,并补充了基础的初始化逻辑):
public class ViewDosen extends AppCompatActivity { TextView tvWelcome; ListView listView; List<Publikasi> lstPublikasi; String namaDosen, kodeDosen; PublikasiAdapter publikasiAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_dosen); // 修复SharedPreferences的模式参数 SharedPreferences DataDosen = getSharedPreferences("Dosen", Context.MODE_PRIVATE); namaDosen = DataDosen.getString("nama", ""); kodeDosen = DataDosen.getString("kode", ""); tvWelcome = findViewById(R.id.tv_welcome); tvWelcome.setText("Selamat Datang, " + namaDosen); listView = findViewById(R.id.list_publikasi); // 必须初始化列表,避免空指针 lstPublikasi = new ArrayList<>(); // 这里需要填充Publikasi数据(比如从数据库/API获取) // 示例:lstPublikasi.add(new Publikasi("Judul Artikel", "Nama Jurnal", 2024)); // 绑定Adapter到ListView publikasiAdapter = new PublikasiAdapter(this, lstPublikasi); listView.setAdapter(publikasiAdapter); } }
常见的出错原因&修复方案
1. PublikasiAdapter实现有误
ListView的Adapter是核心,必须正确继承ArrayAdapter或BaseAdapter并重写关键方法。如果你的Adapter还没写对,参考下面的示例:
public class PublikasiAdapter extends ArrayAdapter<Publikasi> { private Context mContext; private List<Publikasi> mPublikasiList; public PublikasiAdapter(Context context, List<Publikasi> list) { super(context, 0, list); mContext = context; mPublikasiList = list; } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { // 复用列表项视图,提升性能 View listItem = convertView; if (listItem == null) { listItem = LayoutInflater.from(mContext).inflate(R.layout.item_publikasi, parent, false); } // 获取当前位置的Publikasi对象 Publikasi currentItem = mPublikasiList.get(position); // 绑定数据到列表项控件 TextView tvJudul = listItem.findViewById(R.id.tv_judul); TextView tvJurnal = listItem.findViewById(R.id.tv_jurnal); TextView tvTahun = listItem.findViewById(R.id.tv_tahun); tvJudul.setText(currentItem.getJudul()); tvJurnal.setText(currentItem.getJurnal()); tvTahun.setText(String.valueOf(currentItem.getTahun())); return listItem; } }
2. 数据列表未初始化或为空
如果lstPublikasi是null或者没有添加任何数据,ListView要么显示空界面,要么直接报错。确保在初始化Adapter前,给列表填充数据,比如:
// 模拟填充数据(实际项目中可能从数据库/网络请求获取) lstPublikasi.add(new Publikasi("Pengaruh AI pada Pembelajaran", "Jurnal Teknologi Pendidikan", 2024)); lstPublikasi.add(new Publikasi("Optimasi Algoritma untuk Mobile", "Jurnal Informatika", 2023)); // 通知Adapter数据已更新 publikasiAdapter.notifyDataSetChanged();
3. 布局控件ID不匹配
检查activity_view_dosen.xml里的ListView ID是否和代码中findViewById(R.id.list_publikasi)完全一致,同时确保列表项布局item_publikasi.xml里的控件ID和Adapter中绑定的ID一致。
示例item_publikasi.xml布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:orientation="vertical"> <TextView android:id="@+id/tv_judul" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textStyle="bold"/> <TextView android:id="@+id/tv_jurnal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:layout_marginTop="4dp"/> <TextView android:id="@+id/tv_tahun" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="@android:color/darker_gray" android:layout_marginTop="4dp"/> </LinearLayout>
如果还有具体的错误日志(比如Logcat里的异常信息),可以补充出来,这样能更精准定位问题哦!
内容的提问来源于stack exchange,提问作者quentino97
相关产品推荐
相关产品推荐

