首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在改变安卓系统活动时保持ArrayList的值

如何在改变安卓系统活动时保持ArrayList的值
EN

Stack Overflow用户
提问于 2018-07-15 09:55:48
回答 5查看 5K关注 0票数 1

这是ViewActivity

代码语言:javascript
运行
复制
public class ViewActivity extends AppCompatActivity {

    private ListView lvPerson;
    private PersonListAdapter adapter;
    public List<Person> mPersonList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);

        lvPerson = (ListView)findViewById(R.id.listView);

        //Add new person
        Intent intent = getIntent();
        if(intent.hasExtra("add")){
            String name = intent.getStringExtra("name");
            String email = intent.getStringExtra("email");
            String address = intent.getStringExtra("address");
            mPersonList.add(new Person(name, email, address));
            Toast.makeText(getApplicationContext(), "Data berhasil ditambahkan", Toast.LENGTH_SHORT).show();
        }

        //Init adapter
        adapter = new PersonListAdapter(getApplicationContext(), mPersonList);
        lvPerson.setAdapter(adapter);

    }
}

这是InputActivity

代码语言:javascript
运行
复制
public class InputActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input);
    }

    public void saveButtonClicked(View view){

        EditText name = (EditText) findViewById(R.id.editTextName);
        EditText email = (EditText) findViewById(R.id.editTextEmail);
        EditText address = (EditText) findViewById(R.id.editTextAddress);

        String strName = name.getText().toString();
        String strEmail = email.getText().toString();
        String strAddress = address.getText().toString();

        Intent intent = new Intent(this, ViewActivity.class);
        intent.putExtra("add", true);
        intent.putExtra("name", strName);
        intent.putExtra("email", strEmail);
        intent.putExtra("address", strAddress);
        startActivity(intent);

    }
}

显示我的流程是当在InputActivity中单击保存按钮时,它将在ViewActivity中运行“添加人员”代码,并将表单中的数据添加到ArrayList中。

这是工作,但当我使用intent更改活动并返回到ViewActivity时,ArrayList数据就消失了。

我想要的是保留我已经在InputActivity中输入的所有值。

希望您能理解我的意思:)

EN

Stack Overflow用户

发布于 2018-07-15 10:22:34

你所做的事情实际上是非常非常糟糕的,因为你只是为你想要添加和创建的每个人创建了一个又一个活动。它浪费内存和电力。

相反,您应该简单地将结果从InputActivity返回给ViewActivity。

在ViewActivity中,不要调用startActivity(intent),而要使用startActivityForResult(intent, REQUEST_CODE)。然后覆盖onActivityResult(),这样就可以处理返回给ViewActivity的结果。

在InputActivity中,不要调用startActivity(),而是将intent返回给ViewActivity。

下面是一个这样的例子:

ViewActivity

代码语言:javascript
运行
复制
public class ViewActivity extends AppCompatActivity {

    private ListView lvPerson;
    private PersonListAdapter adapter;
    public List<Person> mPersonList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);

        lvPerson = (ListView)findViewById(R.id.listView);

        //Init adapter
        adapter = new PersonListAdapter(getApplicationContext(), mPersonList);
        lvPerson.setAdapter(adapter);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode == RESULT_OK){
            String name = data.getStringExtra("name");
            String email = data.getStringExtra("email");
            String address = data.getStringExtra("address");
            mPersonList.add(new Person(name, email, address));
            adapter.notifyDataSetChanged();
            Toast.makeText(getApplicationContext(), "Data berhasil ditambahkan", Toast.LENGTH_SHORT).show();
        }
    }

}

InputActivity

代码语言:javascript
运行
复制
public class InputActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input);
    }

    public void saveButtonClicked(View view){

        EditText name = (EditText) findViewById(R.id.editTextName);
        EditText email = (EditText) findViewById(R.id.editTextEmail);
        EditText address = (EditText) findViewById(R.id.editTextAddress);

        String strName = name.getText().toString();
        String strEmail = email.getText().toString();
        String strAddress = address.getText().toString();

        Intent intent = new Intent();
        intent.putExtra("add", true);
        intent.putExtra("name", strName);
        intent.putExtra("email", strEmail);
        intent.putExtra("address", strAddress);
        setResult(RESULT_OK, intent);
        finish();    
    }
}

这样做可以避免再次重新创建ViewActivity,因此您不必重新创建所有视图和重新填充列表。您只需重用现有的ViewActivity并将结果添加到现有列表中。

票数 2
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51344683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档