Android Activity间列表传递及SplashActivity未运行问题求助
Android新手开发问题:启动页无法运行+列表为空解决办法
问题1:SplashActivity无法运行
你的AndroidManifest.xml里,MainActivity被设置为了App启动入口(带有LAUNCHER的intent-filter),而SplashActivity仅配置为普通Activity,所以App启动时默认打开MainActivity,不会进入SplashActivity。
修复方案:
将SplashActivity设置为启动入口,同时调整其他Activity的intent-filter配置:
<application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@drawable/mainscreenlogo" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.QuizTheoryApplication" tools:targetApi="31"> <!-- 设置SplashActivity为启动页 --> <activity android:name=".example.QuizTheoryApplication.SplashActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- MainActivity改为普通Activity --> <activity android:name=".example.QuizTheoryApplication.MainActivity" android:exported="true"/> <!-- DashboardActivity移除多余intent-filter(无特殊需求时) --> <activity android:name=".example.QuizTheoryApplication.DashboardActivity" android:label="Preferences" android:exported="true"/> </application>
问题2:列表始终为空
核心原因:
- 你在DashboardActivity中直接赋值
allQuestionsList=listS,但listS是SplashActivity的静态变量,若SplashActivity未被初始化(比如未启动过),该变量为null,调用Collections.shuffle()会触发空指针,更无法获取数据。 - 尝试用
putStringArrayListExtra传递列表,但listS是ArrayList<ModelClass>,与ArrayList<String>类型不匹配,接收时自然拿不到数据。
修复方案:
方法1:让ModelClass实现Parcelable,通过Intent传递列表(推荐,避免静态变量内存泄漏)
首先修改ModelClass实现Parcelable接口:
public class ModelClass implements Parcelable { private String question; private String optionA; private String optionB; private String optionC; private String optionD; private String answer; // 构造方法 public ModelClass(String question, String optionA, String optionB, String optionC, String optionD, String answer) { this.question = question; this.optionA = optionA; this.optionB = optionB; this.optionC = optionC; this.optionD = optionD; this.answer = answer; } // Parcelable 核心方法 protected ModelClass(Parcel in) { question = in.readString(); optionA = in.readString(); optionB = in.readString(); optionC = in.readString(); optionD = in.readString(); answer = in.readString(); } public static final Creator<ModelClass> CREATOR = new Creator<ModelClass>() { @Override public ModelClass createFromParcel(Parcel in) { return new ModelClass(in); } @Override public ModelClass[] newArray(int size) { return new ModelClass[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(question); dest.writeString(optionA); dest.writeString(optionB); dest.writeString(optionC); dest.writeString(optionD); dest.writeString(answer); } // 添加上getter方法供DashboardActivity调用 public String getQuestion() { return question; } public String getOptionA() { return optionA; } public String getOptionB() { return optionB; } public String getOptionC() { return optionC; } public String getOptionD() { return optionD; } public String getAnswer() { return answer; } }
修改SplashActivity传递列表:
public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash_activity_main); ArrayList<ModelClass> listS = new ArrayList<>(); listS.add(new ModelClass("here is the question", "a", "b", "c", "d", "answer")); listS.add(new ModelClass("Under-inflated tires increase fuel consumption. A single tire under-inflated by 56 kpa (8 psi) can increase fuel consumption by?", "25 per cent", "15 per cent", "Seven per cent", "Four per cent", "Four per cent")); listS.add(new ModelClass("You are not allowed to park a vehicle within _____________ of a pedestrian corridor", "9 metres", "3 metres", "30 metres", "15 metres", "15 metres")); listS.add(new ModelClass("What class licence permits the holder to operate a motorcycle?", "Class 4", "Class 1", "Class 6", "Class 5", "Class 6")); listS.add(new ModelClass("Seatbelts must be worn by all drivers and passengers:", "Only when driving in the city", "Only when carrying passengers", "All the time unless exempted by law", "Only when driving on the highway", "All the time unless exempted by law")); new Handler().postDelayed(new Runnable() { @Override public void run() { Intent intent = new Intent(SplashActivity.this, DashboardActivity.class); // 传递Parcelable类型列表 intent.putParcelableArrayListExtra("question_list", listS); startActivity(intent); finish(); // 关闭SplashActivity,避免返回重复进入 } }, 1500); } }
修改DashboardActivity接收并使用列表:
public class DashboardActivity extends AppCompatActivity { private ArrayList<ModelClass> allQuestionsList; private ModelClass modelClass; private int index = 0; // 初始化index值 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); Hooks(); // 从Intent获取列表 allQuestionsList = getIntent().getParcelableArrayListExtra("question_list"); // 先判断列表是否有效,避免空指针 if (allQuestionsList != null && !allQuestionsList.isEmpty()) { Collections.shuffle(allQuestionsList); modelClass = allQuestionsList.get(index); setAllData(); } else { Toast.makeText(this, "暂无题目数据", Toast.LENGTH_SHORT).show(); } } // 你的Hooks()方法(初始化控件) private void Hooks() { // 示例:textViewQuestion = findViewById(R.id.text_view_question); } // 你的setAllData()方法(绑定数据到UI) private void setAllData() { // 示例:textViewQuestion.setText(modelClass.getQuestion()); } }
方法2:保留静态变量(不推荐,易引发内存泄漏)
若暂时不想修改Parcelable,需确保SplashActivity是启动页,并在DashboardActivity中增加空判断:
// DashboardActivity的onCreate方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dashboard); Hooks(); // 先判断静态列表是否有效 if (SplashActivity.listS != null && !SplashActivity.listS.isEmpty()) { allQuestionsList = SplashActivity.listS; Collections.shuffle(allQuestionsList); modelClass = allQuestionsList.get(index); setAllData(); } else { Toast.makeText(this, "数据加载失败", Toast.LENGTH_SHORT).show(); } }
内容的提问来源于stack exchange,提问作者Igal
相关产品推荐
相关产品推荐

