簡體   English   中英

在完成之前將數據從一個活動發送到另一個活動

[英]Sending data from one activity to another before finish

我想將一些數據從活動轉移到上一個活動。 我首先通過測試數據的發送來簡化它,所以我創建了一個項目,其中包含2個活動, MainActivitySecondActivitySecondActivity具有文本字段和按鈕, MainActivity具有文本視圖。 我在SO上查找了自己的問題,發現很多東西都說要使用startActivityForResult並且找到了一些示例來幫助我編寫代碼。 但是,它似乎不起作用。 我試圖打印出字符串值。 代碼和輸出如下。

主要活動:

package com.example.activitytesting;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
    private static final int REQUEST_CODE_TEST = 0;

    private TextView txtView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtView = (TextView) findViewById(R.id.txtView);

        Intent i = new Intent(MainActivity.this, SecondActivity.class);
        startActivityForResult(i, REQUEST_CODE_TEST);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == REQUEST_CODE_TEST) {
            if(resultCode == Activity.RESULT_OK) {
                String txt = data.getStringExtra("txt");
                System.out.println("from main activity: \"" + txt + "\"");
                txtView.setText(txt);
            }
        }
    }
}

SecondActivity:

package com.example.activitytesting;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class SecondActivity extends Activity {
    private String txtStr;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        EditText txt = (EditText) findViewById(R.id.txtField);
        txtStr = txt.getText().toString().isEmpty() ? "empty text field" : txt.getText().toString();

        Button finishBtn = (Button) findViewById(R.id.finishBtn);
        finishBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Intent result = new Intent();
                System.out.println("from second activity: \"" + txtStr + "\"");
                result.putExtra("text", txtStr);
                setResult(Activity.RESULT_OK, result);
                finish();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.second, menu);
        return true;
    }

}

現在,我從LogCat獲得了輸出,它們是:

12-05 01:28:34.850: I/System.out(359): from second activity: "empty text field"
12-05 01:28:34.900: I/System.out(359): from main activity: "null"

為什么我無法將數據從一項活動轉移到另一項活動?

您的資源束密鑰不匹配

第二活動正在使用

result.putExtra("text", txtStr);

但是MainActivity使用

String txt = data.getStringExtra("txt");

兩種活動都應使用相同的鍵-在兩種情況下均使用'text'或'txt'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM