在其他活动中恢复ArrayList

问题描述 投票:0回答:6

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

}

}

java android arraylist
6个回答
0
投票

在一项活动中,您有一个ArrayList支持您的列表视图。您可以通过用户界面通过某些输入更新ArrayList。然后你想在其他活动中使用ArrayList中的数据。

你有的替代方案是:

1)以intent发送数据。 数据必须是Serializable或Parcelable

2)Pesist数据并让其他活动读取持久数据。 在某种程度上,您还需要序列化数据以便持久化。持久化数据的替代方案是SharedPreferencesflat 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);

0
投票

您可以尝试使用共享的viewmodel在活动之间共享数据。或者您可以将数据保存到SQlite数据库中。


0
投票

有针对您的问题的内置Android功能。它被称为Intents和putExtra。示例代码如下

private ArrayList<String> arraylist;

在下一个活动中,您可以通过调用恢复数据

Intent intent = getIntent();
arraylist = intent.getStringArrayListExtra("arraylist");

0
投票

对于打开/显示第二个屏幕,使用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);

0
投票

您应该创建一个单例数据类,并从每个活动的创建和更新列表中的每个活动中获取列表

SecondActivity

获取数据:

ArrayList<String> arrayList = new ArrayList<>();
if (getIntent() != null) {
      arrayList = (ArrayList<String>) getIntent().getSerializableExtra("arrayList");
}

0
投票

Intent.class

To start others activities and send values.

发送值

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

代码没有被测试但是想法是正确的!

© www.soinside.com 2019 - 2024. All rights reserved.