我有一个带有按钮的输入,用于在列表视图中添加项目,但我想要恢复其他活动中的所有项目,但有4个活动我想要恢复项目。我希望有人可以帮助我。我的MainActivity的代码是listview中要添加的输入
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));
}
}
在一项活动中,您有一个ArrayList
支持您的列表视图。您可以通过用户界面通过某些输入更新ArrayList
。然后你想在其他活动中使用ArrayList
中的数据。
你有的替代方案是:
1)以intent
发送数据。
数据必须是Serializable或Parcelable
2)Pesist数据并让其他活动读取持久数据。
在某种程度上,您还需要序列化数据以便持久化。持久化数据的替代方案是SharedPreferences
,flat file
以方便应用程序的私有存储文件夹或SQLite。
如果ArrayList
中的复杂对象是数据,那么可以使ArrayList成为可以序列化的String的一种方法是使用Json
库将其编码为Gson
。根据您选择的方式,您可以将Gson()与整个ArrayList或每个元素一起使用。
编辑我
特别是对于qazxsw poi,你可以在ArrayList<String>
本身发送qazxsw poi。
ArrayList
在AnotherActivity类中
intent
在onCrate()中:
//您必须添加空值检查。
Intent intent = new Intent(this, AnotherActivity.class);
intent.putStringArrayListExtra("arraylist",arraylist);
startActivity(intent);
您可以尝试使用共享的viewmodel在活动之间共享数据。或者您可以将数据保存到SQlite数据库中。
有针对您的问题的内置Android功能。它被称为Intents和putExtra。示例代码如下
private ArrayList<String> arraylist;
在下一个活动中,您可以通过调用恢复数据
Intent intent = getIntent();
arraylist = intent.getStringArrayListExtra("arraylist");
对于打开/显示第二个屏幕,使用val parametersGoHere: ArrayList<SomethingParcalableOrSerializable> = arrayListOf()
val intent = Intent(context, AnotherActivity.javaClass).putExtra("key", parametersGoHere)
context.startActivity(intent)
并使用(ArrayList<OfYourType>)(getIntent().getExtras().getSerializable("key"))
传递arraylist。
Intnet
使用下面的线条获取extras
中的arraylist。
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");
}
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();
代码没有被测试但是想法是正确的!