Android开发问题:ListView跳转Activity传字符串时应用崩溃
嘿,我来帮你搞定这个ListView点击跳转崩溃的问题!这种情况我碰到过好多次,大概率是下面几个常见坑之一,咱们一个个排查:
1. 目标Activity没在Manifest里注册
这是新手最容易踩的坑!如果你跳转到的那个展示学校详情的Activity没在AndroidManifest.xml里声明,系统找不到它就会直接崩溃。
解决方案:
打开AndroidManifest.xml,在<application>标签里加上目标Activity的注册代码:
<activity android:name=".SchoolDetailActivity" /> <!-- 这里的.SchoolDetailActivity要换成你实际的目标Activity类名 -->
2. ListView点击事件的Intent代码写错了
可能是获取学校名称时出现空指针,或者Intent的上下文/目标类写错了。给你一个标准的正确写法参考:
// 假设你的ListView对象叫listView listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 1. 获取点击的学校名称 // 如果你的Adapter是用String数组填充的,直接这样取: String schoolName = (String) parent.getItemAtPosition(position); // 如果是自定义的School对象Adapter,就强转成你的对象再取属性: // School selectedSchool = (School) parent.getItemAtPosition(position); // String schoolName = selectedSchool.getSchoolName(); // 2. 创建Intent并传递数据 Intent intent = new Intent(YourCurrentActivity.this, SchoolDetailActivity.class); // 用一个唯一的键传递数据,比如"SCHOOL_NAME" intent.putExtra("SCHOOL_NAME", schoolName); // 3. 启动Activity startActivity(intent); } });
注意:这里的YourCurrentActivity要换成你当前这个带ListView的Activity类名,SchoolDetailActivity换成目标Activity的类名。
3. 目标Activity接收数据时没处理空值
如果传递过来的学校名称是空的,或者你获取数据时键名写错了,就会触发空指针崩溃。
解决方案:在目标Activity里先判空再处理:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_school_detail); // 获取传递过来的Intent Intent receivedIntent = getIntent(); if (receivedIntent != null) { // 注意这里的键名要和传递时的完全一致! String schoolName = receivedIntent.getStringExtra("SCHOOL_NAME"); if (schoolName != null) { // 把学校名称展示到TextView里 TextView tvSchoolName = findViewById(R.id.tv_school_name); tvSchoolName.setText(schoolName); } else { // 处理没有拿到数据的情况,比如显示默认文本 Toast.makeText(this, "未获取到学校信息", Toast.LENGTH_SHORT).show(); } } }
4. 别忘了看Logcat的崩溃日志!
上面的都是常见情况,但最准确的还是看系统抛出的崩溃信息。打开Android Studio的Logcat面板,搜索FATAL EXCEPTION,找到崩溃的异常类型(比如ActivityNotFoundException、NullPointerException)和报错的行号,能直接定位到问题所在。
比如如果看到ActivityNotFoundException,那肯定是第1种情况;如果是NullPointerException,就看是哪一行空了,比如获取学校名称的时候,或者找TextView的时候。
内容的提问来源于stack exchange,提问作者Student. Engineering

