使用操作栏发送数据 [Android]

Posted

技术标签:

【中文标题】使用操作栏发送数据 [Android]【英文标题】:Sending data using the action bar [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 函数无效。有什么建议吗?

【问题讨论】:

【参考方案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);

【讨论】:

以上是关于使用操作栏发送数据 [Android]的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从服务器发送到Android?

Android进阶:5发送post请求json数据格式以及okhttp框架的使用

使用Nodejs将数据发送到header.ejs

无法检测从android发送的php中的Post参数

Android GCM Java 服务器 - 没有消息数据的推送通知

向 Android 设备发送数据 向 IOS 设备发送通知