【问题标题】:Sending data using the action bar [Android]使用操作栏发送数据 [Android]
【发布时间】:2016-05-31 16:16:03
【问题描述】:

我希望能够使用返回按钮或操作栏主页按钮将数据从活动 2 发送回活动 1。

这是我在 Activity 2 中设置后退按钮的方式:

@Override public void onBackPressed() {
    String[] userArray = getIntent().getExtras().getStringArray("userArray");
    Log.d("Returning user data:", Arrays.toString(userArray));
    Intent intent = new Intent();
    intent.putExtra("userArray", userArray);
    setResult(RESULT_OK, intent);
    finish();
}

这是我在活动 1 中收到它的方式:

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == getActivity().RESULT_OK){
            String[] userArray = data.getExtras().getStringArray("userArray");
            Log.d("Retained user data:", Arrays.toString(userArray));
}}}

这是我尝试在活动 2 中设置家庭选择的方法:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    if (id == android.R.id.home){
        Toast.makeText(getApplicationContext(), "Saving User Info", Toast.LENGTH_SHORT).show();
        super.onBackPressed();
    }

    return super.onOptionsItemSelected(item);
}

奇怪的是 - toast 有效,但调用 onbackpressed 函数无效。有什么建议吗?

【问题讨论】:

    标签: java android android-activity android-actionbar


    【解决方案1】:

    试试这个 你错过了 return true;

    if (id == android.R.id.home){
        Toast.makeText(getApplicationContext(), "Saving User Info", Toast.LENGTH_SHORT).show();
        String[] userArray = getIntent().getExtras().getStringArray("userArray");
        Log.d("Returning user data:", Arrays.toString(userArray));
        Intent intent = new Intent();
        intent.putExtra("userArray", userArray);
        setResult(RESULT_OK, intent);
        finish();
        return true;
    }
    

    【讨论】:

    • 太棒了,谢谢!没有意识到解决方案有多简单:P
    【解决方案2】:

    不要打电话给super.onBackPressed()。在您的 onOptionsItemSelected(...) 方法中简单地调用 onBackPressed()。通过您当前的调用,您显式调用了超类的实现。

    【讨论】:

    • 啊,我应该提一下,那行不通。也不会将代码从 onBackPressed 复制到 onOptionsItemSelected
    【解决方案3】:

    我能知道您如何在 Activity1 类中调用 Activity2 吗?

    你应该像这样调用 Activity2

    Intent i = new Intent(Activity1.this, Activity2.class);
    startActivityForResult(i, 1);
    

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多