在其他活动中恢复ArrayList

时间:2019-04-09 12:37:46

标签: java android arraylist

我有一个带有按钮的输入,可以在列表视图中添加项目,但是我想恢复其他活动中的所有项目,但是有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));

}

}

6 个答案:

答案 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)

Intent.class

开始其他活动并发送值。

发送值

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");

¡¡¡°代码未测试但想法是正确的 !!