按下按钮后,我想转到第二个活动,在第二个活动中输入数据,然后返回到主活动,但在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();
}
}
为了使应用程序正常运行,我需要更改什么?因为现在我只收到以下消息:应用已停止,但是我没有收到有关任何错误的信息。
答案 0 :(得分:0)
按下按钮后,我想转到第二个活动,在第二个活动中输入数据,然后返回到主活动,但ListView中有数据。
为了使应用程序正常运行,我需要更改什么?因为现在我只收到以下消息:应用已停止,但是我没有收到有关任何错误的信息。
这仅仅是因为您错误地认为每次关闭活动都总是调用Activity.finish()
。但是它永远不会被Android调用。从Activity-lifecycle concepts看这张Lifecyle图片:
您会看到在活动关闭时仅调用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();
}