【问题标题】:How to send data by intent without using finish() function?如何在不使用 finish() 函数的情况下按意图发送数据?
【发布时间】:2017-12-21 20:04:40
【问题描述】:

我正在制作一个有 2 个活动的 android 应用程序。在这个应用程序中,1 号活动将启动 2 号活动并从 2 号活动中请求数据。我使用意图在它们之间传输数据。据我所知,活动 2 仅在调用完成()函数后发送数据。但在我的应用程序中,我想让活动 2 始终处于活动状态。那么,有没有什么方法可以通过使用意图发送数据而无需等待完成()函数?

更新:这是我的源代码:

  • 在 1 号活动中:

按下按钮时打开活动编号

    public static final int REQUEST_CODE_INPUT=10;
    public static final int RESULT_CODE_1=20;
    public static final int RESULT_CODE_2=21;
    private String TAG = "FirstActivity";


    btnInputData.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            //Open Activity number 2 With REQUEST_CODE_INPUT
            Intent intent=new Intent(FirstActivity.this, SecondActivity.class);
            //Call startActivityForResul
            startActivityForResult(intent, REQUEST_CODE_INPUT);
        }
    });

处理收到的数据

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    //Show Log
    Log.d(TAG,"onActivityResult: requestCode = "+ requestCode+ "; resultCode = "+ resultCode);
    //check if requestCode =REQUEST_CODE_INPUT
    //
    if(requestCode==REQUEST_CODE_INPUT)
    {
        //Check ResultCode from Activity 2
        switch(resultCode)
        {
        case RESULT_CODE_1:
            //value from Activity number 2
            int v1= data.getIntExtra("data", 0);
            arrData.add(v1*v1);

            break;
        case RESULT_CODE_2:
            //value from Activity number 2
            int v2= data.getIntExtra("data", 0);
            arrData.add(v2);
            break;
        }
    }
}

*在活动编号 2 中

按下按钮时调用函数发送数据

    btnSave1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            //
            sendToFirstActivity(FirstActivity.RESULT_CODE_1);
        }
    });

    btnSave2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //
            sendToFirstActivity(FirstActivity.RESULT_CODE_2);
        }
    });

将数据返回到活动编号 1 的函数

public void sendToFirstActivity(int resultcode)
{
    Intent intent=getIntent();
    int value= Integer.parseInt(editNumber.getText()+"");
    intent.putExtra("data", value);
    setResult(resultcode, intent);
    finish();
}

在此代码中,按下按钮后,活动编号 2 将关闭并将数据发送到活动编号 1。当我尝试删除 finish() 函数时,活动 2 不会关闭但不会向活动编号 1 发送数据。

【问题讨论】:

  • 把你的代码放在这里
  • 请将您的代码发布到堆栈
  • Finish() 需要关闭当前活动。它与活动之间的数据传输无关。使用 putExtra() 方法传输数据。当 startActivty() 被触发时,它会将数据发送到其他活动。完成无关紧要。它只是在您的下一个活动被触发后关闭活动。
  • activity 2 只在调用 finish() 函数后发送数据??我不这么认为。您是否尝试实现onActivityResult ??
  • 这里可以找到很多方法stackoverflow.com/questions/2091465/…

标签: android android-intent android-activity data-transfer


【解决方案1】:

onActivityResult()函数的See the API,只有在调用finish()函数时才会触发。我不认为startActivityForResult() 对你来说是正确的方法。

【讨论】:

  • 您对此有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 2013-02-28
  • 2012-09-06
  • 2018-04-11
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
相关资源
最近更新 更多