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

Android ListView项点击跳转新页面展示数据崩溃问题求助

解决ListView点击跳转详情页崩溃的问题

看起来你遇到了ListView点击项跳转新Activity时的崩溃问题,我帮你梳理下代码里的潜在问题和修复方案:

核心问题分析

从你给出的代码片段来看,主要有几个可能导致崩溃的点:

  1. Cursor未定位到正确位置:你直接调用myDB.getPersonnelList()获取Cursor,但这个Cursor默认指向数据的前一个位置,而且没有和点击的position关联,直接取值会触发异常。
  2. Intent初始化不完整:代码里Intent intent = new Intent(User.this...没有写完,如果目标Activity的类名没正确指定,会抛出ClassNotFoundException或者ActivityNotFoundException。
  3. Cursor生命周期问题:如果你的Adapter已经关闭了Cursor(比如SimpleCursorAdapter的Cursor被提前回收),这里再使用这个Cursor会导致IllegalStateException。

修复后的完整代码示例

下面是调整后的点击事件代码,解决了上述问题:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
        // 直接从Adapter获取当前位置对应的Cursor,避免重复查询和位置错误
        Cursor cursor = (Cursor) adapterView.getItemAtPosition(position);
        
        // 先检查Cursor是否有效,防止空指针或越界
        if (cursor != null && cursor.moveToPosition(position)) {
            // 替换成你数据库里的实际字段名,比如id、name、address等
            int personnelId = cursor.getInt(cursor.getColumnIndexOrThrow("id"));
            String personnelName = cursor.getString(cursor.getColumnIndexOrThrow("name"));
            String personnelEmail = cursor.getString(cursor.getColumnIndexOrThrow("email"));
            
            // 正确初始化Intent,指定目标详情页Activity(比如DetailActivity)
            Intent intent = new Intent(User.this, DetailActivity.class);
            // 把需要传递的详情数据放入Intent
            intent.putExtra("personnel_id", personnelId);
            intent.putExtra("personnel_name", personnelName);
            intent.putExtra("personnel_email", personnelEmail);
            
            // 启动详情页Activity
            startActivity(intent);
        }
    }
});

额外注意事项

  1. 注册目标Activity:务必在AndroidManifest.xml中注册你的详情页Activity,否则会崩溃:
<activity android:name=".DetailActivity" />
  1. 在详情页接收数据:在DetailActivity的onCreate方法中获取传递的数据并展示:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    
    // 获取Intent中的数据
    Intent intent = getIntent();
    int id = intent.getIntExtra("personnel_id", -1);
    String name = intent.getStringExtra("personnel_name");
    String email = intent.getStringExtra("personnel_email");
    
    // 将数据展示到对应控件上
    TextView tvName = findViewById(R.id.tv_personnel_name);
    TextView tvEmail = findViewById(R.id.tv_personnel_email);
    tvName.setText(name);
    tvEmail.setText(email);
}
  1. Cursor生命周期管理:如果使用SimpleCursorAdapter,建议配合LoaderManager来管理Cursor的生命周期,避免Cursor被提前关闭或泄漏,这样能进一步减少崩溃风险。

内容的提问来源于stack exchange,提问作者Dylan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:31:39