将数据发送到另一个活动的Listview

时间:2019-07-11 02:37:55

标签: java android android-listview

按下按钮后,我想转到第二个活动,在第二个活动中输入数据,然后返回到主活动,但在ListView中有数据。这是我的代码:

MainActivity:

public class MainActivity extends AppCompatActivity {

    Button button;
    ListView listView;
    String name;
    private static final int REQUEST_CODE = 1;


    ArrayAdapter<String> adapter;
    ArrayList<String> nameList;

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


        button = findViewById(R.id.button2);
        listView = findViewById(R.id.CarList);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                startActivityForResult(i, REQUEST_CODE);
            }
        });



        nameList = new ArrayList<String>();
        nameList.addAll(Arrays.asList(name));

        adapter = new ArrayAdapter<String>(this, R.layout.element, nameList);

        listView.setAdapter(adapter);


    }

    protected void onActivityResult(int requestCode, int resultCode, Intent i){
        if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {

            name = i.getStringExtra("name");

        }
    }

}

这是我的 SecondActivity:

public class SecondActivity extends AppCompatActivity {

    EditText editText;
    Button button2;
    String name;

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

        editText = findViewById(R.id.editText);
        button2 = findViewById(R.id.button);


    }

    public void finish() {

        Intent i = new Intent();
        name = editText.getText().toString();
        i.putExtra("name", name);
        setResult(RESULT_OK, i);
        super.finish();
    }
}

为了使应用程序正常运行,我需要更改什么?因为现在我只收到以下消息:应用已停止,但是我没有收到有关任何错误的信息。

1 个答案:

答案 0 :(得分:0)

  

按下按钮后,我想转到第二个活动,在第二个活动中输入数据,然后返回到主活动,但ListView中有数据。

     

为了使应用程序正常运行,我需要更改什么?因为现在我只收到以下消息:应用已停止,但是我没有收到有关任何错误的信息。

这仅仅是因为您错误地认为每次关闭活动都总是调用Activity.finish()。但是它永远不会被Android调用。从Activity-lifecycle concepts看这张Lifecyle图片:

Activity-lifecycle concepts

您会看到在活动关闭时仅调用onStop(),然后调用onDestroy()

您需要手动调用finish()方法来发送您的意图。或者,更好的方法是,创建仅构建和设置结果意图的方法。像这样:

private void prepareResult(String name) {
    Intent i = new Intent();
    i.putExtra("name", name);
    setResult(RESULT_OK, i);
}

然后在您要结束活动时调用它:

String name = editText.getText().toString();
prepareResult(name);
finish();

或者您也可以覆盖onBackPressed()来向后按下按钮,如下所示:

@Override
public void onBackPressed() {
    Intent i = new Intent();
    name = editText.getText().toString();
    i.putExtra("name", name);
    setResult(RESULT_OK, i);

  // The default implementation simply finishes the current activity
  // see the documentation.
  super.onBackPressed();
}