【问题标题】:Sending data to Listview of another activity将数据发送到另一个活动的 Listview
【发布时间】:2019-07-11 02:37:55
【问题描述】:

按下按钮后我想进入第二个活动,在第二个活动中输入数据然后返回主活动,但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();
    }
}

我可以进行哪些更改以使应用程序正常运行?因为现在我只收到消息:应用程序已停止,但我没有收到有关任何错误的信息。

【问题讨论】:

  • 更改此finish() 方法的名称,因为有一个具有此名称的预定义方法,当您更改它时让我知道是否仍有问题

标签: java android android-listview


【解决方案1】:

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

我可以进行哪些更改以使应用程序正常工作?因为现在我只收到消息:应用程序已停止,但我没有收到有关任何错误的信息。

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

你可以看到只有onStop()然后onDestroy()在activity关闭时被调用。

您需要手动调用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();
}

【讨论】:

  • 我按照您的指示进行了更改,即:我创建了prepareResult方法,然后在按下按钮时调用它。不幸的是我仍然收到这样的消息,这行代码问题是不是有问题? nameList.addAll(Arrays.asList(name));在我看来,这一行应该在 onActivityResult 方法中,传递 name 的值。
  • 你是对的,nameList.addAll(Arrays.asList(name)); in onCreate()` 应该被删除,因为你还没有 name 变量的值。以前,我认为您已经实现了 onActivityResult 来处理该值。要修复它,您需要使用以下内容修改您的 onActivityResult()protected void onActivityResult(int requestCode, int resultCode, Intent i){ if (resultCode == RESULT_OK &amp;&amp; requestCode == REQUEST_CODE) { String name = i.getStringExtra("name"); adapter.notifyDataSetChanged(); } }
猜你喜欢
  • 2019-07-31
  • 2015-04-09
  • 2015-04-08
  • 2017-01-07
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多