我的第二个活动没有返回第一个的结果

时间:2017-08-15 05:49:15

标签: android

我正在尝试制作一个应用MainActivityMain2Activity请求结果的应用 MainActivity的代码是:

package hello.option_menu;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.ye.collor.stackapplication.R;

public class MainActivity extends AppCompatActivity {
    Button bt;
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt=(Button)findViewById(R.id.bt);
        TextView tv=(TextView)findViewById(R.id.tv) ;
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Intent i=new Intent(MainActivity.this,Main2Activity.class);
                startActivityForResult(i,1);
            }
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==1)
        {
            String message=data.getStringExtra("message");
            tv.setText(message);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.jai, menu);

        return true;
    }

}
<{1}}的代码是:

Main2Activity

所以我的应用视图是:my MainActivity

my Main2Activity

因此,当我在package hello.option_menu; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.ye.collor.stackapplication.R; public class Main2Activity extends AppCompatActivity { Button bt; EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); bt=(Button)findViewById(R.id.button); et=(EditText)findViewById(R.id.et); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { String message=et.getText().toString(); Intent intent=new Intent(); intent.putExtra("message",message); setResult(1,intent); finish(); } }); } public boolean onCreateOptionsMenu(Menu menu) { menu.add("hello"); MenuInflater inflater=getMenuInflater(); inflater.inflate(R.menu.jai,menu); return true; } } 中键入文本后点击发送按钮来设置Main2Activity中写的文字时,它没有那样做。它仍然是“你好世界”,所以文字没有改变。我无法解决这个问题。

2 个答案:

答案 0 :(得分:1)

MainActivity2更改

setResult(1,intent);

setResult(RESULT_OK,intent);

您要做的是将RESULT_TYPE的硬编码值设置为1,这是RESULT_FIRST_USER的int值,而您打算设置RESULT_OK

您假设的值1也是m = MainActivity2中的请求代码,实际上不是REQUEST_CODE而是RESULT_CODE。 requestCode保留在MainActivity中,可用于区分您打开的不同活动。

此外,您可以按照以下方式更改onActivityResult以使其更安全

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1 && resultCode==RESULT_OK)
    {
        String message=data.getStringExtra("message");
        tv.setText(message);
    }
}

更新1 另外正如你所提到的,它之后会崩溃,因为你的TextView没有在MainActivity中正确初始化。

所以在MainActivity Change

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

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

以便在OnActivityResult

返回时为您声明为全局声明的Textview指定值

答案 1 :(得分:1)

Main2Activity

中尝试此操作
  String message = et.getText().toString();
  Intent intent = new Intent(Main2Activity.this, MainActivity.class);
  intent.putExtra("message", message);
  setResult(1, intent);
  finish();

只需更改为此Intent intent = new Intent(Main2Activity.this, MainActivity.class);

即可

加入MainActivity

更改

Button bt=(Button)findViewById(R.id.bt);
TextView tv=(TextView)findViewById(R.id.tv) 

bt=(Button)findViewById(R.id.bt);
tv=(TextView)findViewById(R.id.tv) 

更改onActivityResult()方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1 || resultCode == 1) {
        String message = data.getStringExtra("message");
        tv.setText(message);
        Log.e("resultCode", resultCode + "");
        Log.e("message", message);
    }
}