我有一个带有按钮的输入,可以在列表视图中添加项目,但是我想恢复其他活动中的所有项目,但是有4个我要恢复项目的活动。我希望有人能帮助我。我的MainActivity的代码是要添加到列表视图中的输入
public class MainActivity extends AppCompatActivity {
private Button bt2;
private EditText et;
private Button bt;
private ListView lv;
public ArrayList<String> arrayList;
private ArrayAdapter<String> customeAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.editText);
bt = (Button) findViewById(R.id.button);
lv = (ListView) findViewById(R.id.listview);
bt2 = (Button) findViewById(R.id.button2);
arrayList = new ArrayList<String>();
customeAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, arrayList);
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
intent.putStringArrayListExtra("arraylist",arrayList);
startActivity(intent);
}
});
lv.setAdapter(customeAdapter);
onBtnClick();
}
public void onBtnClick() {
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String result = et.getText().toString();
arrayList.add(result);
customeAdapter.notifyDataSetChanged();
}
});
}
}
公共类Main2Activity扩展了AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
tv = (TextView) findViewById(R.id.tvMainTwo);
Intent intent = getIntent();
ArrayList<String> arrayList = intent.getStringArrayListExtra("arrayList");
Random theRandom = new Random();
int playersNumb = theRandom.nextInt(arrayList.size());
tv.setText(tv.getText() + " " + arrayList.get(playersNumb));
}
}
答案 0 :(得分:0)
您可以尝试使用共享的视图模型在活动之间共享数据。或者您可以将数据保存到SQlite数据库中。
答案 1 :(得分:0)
您的问题有内置的android功能。它称为Intents和putExtra。下面的示例代码
val parametersGoHere: ArrayList<SomethingParcalableOrSerializable> = arrayListOf()
val intent = Intent(context, AnotherActivity.javaClass).putExtra("key", parametersGoHere)
context.startActivity(intent)
在下一个活动中,您可以通过调用
恢复数据(ArrayList<OfYourType>)(getIntent().getExtras().getSerializable("key"))
答案 2 :(得分:0)
在一个活动中,您有一个ArrayList
支持您的列表视图。您可以通过用户界面通过某些输入来更新ArrayList
。
然后,您想在其他活动中使用该ArrayList
中的数据。
您可以选择的替代方法是:
1)通过intent
发送数据。
数据必须可序列化或可打包
2)保留数据,并让其他活动读取保留的数据。
您还需要以某种方式对数据进行序列化以保留它。
持久保存数据的替代方法是SharedPreferences
,为方便起见,在应用程序的私有存储文件夹或SQLite中使用flat file
。
如果ArrayList
中有复杂的对象作为数据,可以使ArrayList成为可序列化的String的一种方法是使用Json
库将其编码为Gson
。根据您选择的方式,您可以将Gson()与整个ArrayList或每个元素一起使用。
编辑我
特别是对于ArrayList<String>
,您可以在ArrayList
本身中感知intent
。
Intent intent = new Intent(this, AnotherActivity.class);
intent.putStringArrayListExtra("arraylist",arraylist);
startActivity(intent);
在AnotherActivity类中
private ArrayList<String> arraylist;
和onCrate()中:
//您将必须添加对空值的检查。
Intent intent = getIntent();
arraylist = intent.getStringArrayListExtra("arraylist");
答案 3 :(得分:0)
要打开/显示第二个屏幕,请使用Intnet
,并将数组列表传递给extras
。
Intent intent = new Intent(CurretnActivity.this, SecondActivity.class);
intent.putExtra("arrayList", arrayList);
startActivity(intent);
使用下面的行在SecondActivity
中获取数组列表。
ArrayList<String> arrayList = new ArrayList<>();
if (getIntent() != null) {
arrayList = (ArrayList<String>) getIntent().getSerializableExtra("arrayList");
}
答案 4 :(得分:0)
您应该创建一个单例数据类,并从创建和更新每个活动的列表中获取每个活动的列表
public class DataHolder {
private String data;
public String getData() {return data;}
public void setData(String data) {this.data = data;}
private static final DataHolder holder = new DataHolder();
public static DataHolder getInstance() {return holder;}
}
获取数据:
String data = DataHolder.getInstance().getData();
答案 5 :(得分:0)
Map<String, String> hashMap = new HashMap<>(); // or List, or Set...
Intent intent = new Intent(SourceActivity.this, DestinationActivity.class);
intent.putExtra("hashMap", hashMap); // putArray(), putChars()...
startActivity(intent);
Intent intent = getIntent();
HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("hashMap");
¡¡¡°代码未测试但想法是正确的 !!