【发布时间】:2021-06-22 07:16:33
【问题描述】:
我最近开始学习 Android 编程。我在两个活动之间传输数据时遇到问题。在第一个活动中,一些 EditTexts 从用户那里获取信息,并且 btn_apply 按钮应该将它们保存在一个列表中。 btn_show 按钮应该在第二个活动中显示学生姓氏,但我的代码只重复显示最后一个姓氏。不知道是什么问题?
主要活动:
package com.example.mysixthandroidapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.NumberPicker;
import android.widget.TextView;
import java.io.Serializable;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText txt_name = (EditText)findViewById(R.id.txt_name);
EditText txt_id = (EditText)findViewById(R.id.txt_lastname);
EditText txt_filed = (EditText)findViewById(R.id.txt_field);
EditText txt_university = (EditText)findViewById(R.id.txt_university);
EditText txt_startyear = (EditText)findViewById(R.id.txt_startyear);
Button btn_apply = (Button)findViewById(R.id.btn_apply);
Button btn_show = (Button)findViewById(R.id.btn_show);
Student std = new Student();
TextView txt_result = (TextView)findViewById(R.id.txt_result);
final ArrayList<Student> students = new ArrayList<Student>();
btn_apply.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
std.setStudent_name(txt_name.getText().toString());
std.setStudent_lastname(txt_id.getText().toString());
std.setStudent_field(txt_filed.getText().toString());
std.setStudent_university(txt_university.getText().toString());
std.setStudent_startyear(txt_startyear.getText().toString());
students.add(std);
}
});
btn_show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent myIntent = new Intent(MainActivity.this, SecondActivity.class);
Bundle arg = new Bundle();
arg.putSerializable("STUDENT", (Serializable)students);
myIntent.putExtra("BUNDLE", arg);
MainActivity.this.startActivity(myIntent);
}
});
}
}
第二个活动:
package com.example.mysixthandroidapp;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import java.util.ArrayList;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent = getIntent();
Bundle arg = intent.getBundleExtra("BUNDLE");
ArrayList <Student> students_list = (ArrayList <Student>)arg.getSerializable("STUDENT");
TextView txt_list = (TextView)findViewById(R.id.txt_list);
for(int i = 0 ; i < students_list.size() ; i++){
txt_list.setText("student: "+i + students_list.get(i).getStudent_lastname() + "\n");
}
}
}
学生班:
package com.example.mysixthandroidapp;
import java.io.Serializable;
import java.util.ArrayList;
public class Student implements java.io.Serializable {
private String Student_name;
private String Student_lastname;
private String Student_field;
private String Student_university;
private String Student_startyear;
public void setStudent_name(String name) {
Student_name = name;
}
public void setStudent_lastname(String lname) {
Student_lastname = lname;
}
public void setStudent_field(String field) {
Student_field = field;
}
public void setStudent_university(String university) {
Student_university = university;
}
public void setStudent_startyear(String startyear) {
Student_startyear = startyear;
}
public String getStudent_name() {
return Student_name;
}
public String getStudent_lastname() {
return Student_lastname;
}
public String getStudent_field() {
return Student_field;
}
public String getStudent_university() {
return Student_university;
}
public String getStudent_startyear() {
return Student_startyear;
}
}
【问题讨论】:
-
学生类可以序列化吗?
-
应该是? :) 怎么样?
-
是的,应该是。检查如何使类可序列化。另请查看给出的答案,它提供了替代方案。
-
public class Student implements java.io.Serializable {- 完成 -
你能解释一下吗?
标签: android android-activity appcompatactivity