点击按钮跳转新布局显示ListView时应用崩溃问题求助
问题分析与解决
你的应用崩溃核心原因是布局文件与Activity的绑定完全搞反,导致代码中找不到目标控件触发空指针异常,和Android Studio配置无关。以下是具体问题点和修正方案:
问题点
- MainActivity绑定了
activity_main.xml,但该布局仅包含ListView,无按钮控件,代码中findViewById(R.id.button)会返回null,触发空指针 - ListViewActivity绑定了
activity_listview.xml,但该布局仅包含按钮,无ListView控件,代码中findViewById(R.id.listView)返回null,调用setAdapter时直接崩溃 - MainActivity中
findViewById(R.id.main)同样会空指针,因为原activity_main.xml没有该ID的布局容器
修正后的代码
1. 修正MainActivity对应的布局 activity_main.xml
该布局需包含触发跳转的按钮:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main" tools:context=".MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示列表" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="26dp"/> </androidx.constraintlayout.widget.ConstraintLayout>
2. 修正ListViewActivity对应的布局 activity_listview.xml
该布局需包含显示列表的ListView:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
3. 确认MainActivity代码(无需修改,布局修正后即可正常运行)
package fr.yodrack.simplelistview; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); Button button = findViewById(R.id.button); button.setOnClickListener(v -> { Intent intent = new Intent(MainActivity.this, ListViewActivity.class); startActivity(intent); }); } }
4. 确认ListViewActivity代码(无需修改,布局修正后即可正常运行)
package fr.yodrack.simplelistview; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; public class ListViewActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview); ArrayList<String> dataList = new ArrayList<>(); dataList.add("Élément 1"); dataList.add("Élément 2"); dataList.add("Élément 3"); ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList); ListView listView = findViewById(R.id.listView); listView.setAdapter(adapter); } }
5. 检查AndroidManifest.xml
确保已注册ListViewActivity:
<activity android:name=".ListViewActivity" android:exported="false" />
内容的提问来源于stack exchange,提问作者yodrack
相关产品推荐
相关产品推荐

