【问题标题】:How to get extra content in a running activity?如何在跑步活动中获得额外内容?
【发布时间】:2021-09-13 07:14:42
【问题描述】:

我想发送用户在当前活动中输入的文本(像一个对话框但不是一个)。 Activity 1 在后台运行。 到目前为止,我已经尝试过:

第二个活动代码:

 submitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();

            if(companyNameEditText.getText().toString()!=null) {
                intent.putExtra("companyName", companyNameEditText.getText().toString());
                 nameChanged=true;
                finish();
            }
            else{
                Toast.makeText(ChangeNameActivity.this,"Please enter a value",Toast.LENGTH_SHORT).show();
            }
        }
    });

onDestroy 用于第二个 Activity:

 @Override
protected void onDestroy() {
    super.onDestroy();
    if(nameChanged)
    {
        activityFinishedWithChanges= true;
    }
}

第一个活动的简历:

 @Override
protected void onResume() {
    super.onResume();
    if(ChangeNameActivity.activityFinishedWithChanges) {
        companyNameText = findViewById(R.id.companyNameText);
        if (getIntent().hasExtra("companyName")) {
            String companyName = getIntent().getStringExtra("companyName");
            if (companyName != null) {
                if (!companyName.equals("")) {
                    companyNameText.setText(companyName);
                    AppUtils.setNameSharedPreference(BrandSettingsActivity.this, AppConstants.organizationName, getIntent().getStringExtra("companyName"));
                }
            }
        }
    }
}

在我的情况下,我得到一个空值。

【问题讨论】:

    标签: java android android-intent android-activity onresume


    【解决方案1】:

    如果我正确理解您的问题,您希望将数据从(第二个活动)发送到您之前打开的(第一个活动)

    所以,从您的 FirstActivity 使用 startActivityForResult() 方法调用 SecondActivity

    例如:

    int ACTIVITY_CODE= 1
    Intent i = new Intent(this, SecondActivity.class);
    startActivityForResult(i, ACTIVITY_CODE);
    

    在您的 SecondActivity 中设置您想要返回给 FirstActivity 的数据。

    例如:在SecondActivity中如果要发回数据:

    Intent returnIntent = new Intent();
    returnIntent.putExtra("result",result);
    setResult(Activity.RESULT_OK,returnIntent);
    finish();
    

    现在在您的 FirstActivity 类中为 onActivityResult() 方法编写以下代码。

    @Override
    protected void onActivityResult(int requestCode, int     resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if (requestCode == ACTIVITY_CODE) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
      }
    }
    

    希望它能解决你的问题:)

    【讨论】:

    • 它在大多数情况下都可以工作,但我将 onActivityResult 用于图像。还是谢谢。
    • @javaOutlaw 您可以同时使用它,您只需为您的公司名称和图像请求指定不同的 requestCode。例如,如果 requestCode 参数的值为 1 或 2,您可以使用 1 作为图像请求代码,使用 2 作为公司请求并以不同方式处理 onActivityResult。
    • 我会尝试并告诉你。
    【解决方案2】:

    您当前的方法不起作用,因为您创建的用于检索公司名称的 Intent 没有以任何方式使用。

    您应该使用 ActivityClass 的ActivityResult 功能。基本概念是这样工作的:

    首先,您启动一​​个活动,请求返回带有Context.startActivitForResult(Intent,requestCode) 的结果。新活动开始了,并且有机会做一些事情。当新活动检索到结果时,它会将其结果设置为Context.setResult(),然后自行完成。 当新的 Activity 完成时,函数 Activity.onActivityResult(requestCode,resultCode,data) 会被调用,使用相同的 requestCode,在 Context.startActivitForResult(Intent,requestCode) 中定义,data 和 resultCode 在 Context.setResult() 中定义。

    官方文档推荐使用更高级的api:https://developer.android.com/training/basics/intents/result

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多