You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:10:20