startActivityForResult()在我再次点击后工作?

时间:2016-02-11 17:43:58

标签: android

当我在主要开始新活动(message.java)中点击按钮并且我正在尝试从消息活动中获取数据时,我有 2活动 mainActivity 。在消息活动中,我有edittext,当点击按钮返回mainactivity并在textview中显示该信息。这段代码工作但问题是当我点击 mainActivity 中的按钮时 它首先删除textview的文本,然后消息活动开始。这不是我想要的,而且,它从消息活动获取信息,但是在 mainActivity 中我必须再次点击mainActivtiy按钮以在textview中显示。有什么建议吗?

这就是我想要的 enter image description here

此图显示问题 enter image description here

父母 - >的 MainActivity

儿童 - > 消息

public class MainActivity extends AppCompatActivity {
private RelativeLayout rLayout;
private Button bt,bt2;
private TextView tv;
private String s;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    rLayout=(RelativeLayout) findViewById(R.id.relativeLayout);
    tv=(TextView)findViewById(R.id.textView2);
    bt2=(Button)findViewById(R.id.button4);

    final Intent i=new Intent(getBaseContext(),MessageActivity.class);
    bt2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivityForResult(i, 1);
            tv.setText(s);
        }
    });
}//end of onCreate

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if(resultCode == RESULT_OK){
                s=data.getStringExtra("info");

            }
        }
    }
}//end of mainActivity

这里是message.java

public class MessageActivity extends Activity {
private Button bt;
private TextView tv;
private EditText et;
private String s;
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.message);

    bt=(Button)findViewById(R.id.button);
    et=(EditText)findViewById(R.id.editText);
    tv=(TextView)findViewById(R.id.textView);

    bt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent data = new Intent();
            s=et.getText().toString();
            data.putExtra("info", s);
            setResult(RESULT_OK, data);
            finish();
        }
    });
}
}

3 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了您的问题,但如果您想从MessageActivity回来时在MainActivity中显示文本,则应该在onActivityResult()方法中设置文本,而不是在clickListener中。 所以你的代码看起来像这样:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            s=data.getStringExtra("info");
            tv.setText(s);
        }
    }
}

答案 1 :(得分:0)

为什么不尝试在活动结果函数中设置textView文本。是更好的地方。想想,当您启动子Activity时,父活动的流程就会停止。当您完成子活动时,flow直接转到onActivityResult函数。试试吧。问候。

答案 2 :(得分:0)

在您的MainActivity中,您需要在收到文本视图后设置文本。问题是startActivityForResult是异步调用。一旦调用此方法消失,它将启动其他活动,但您的onClick()方法不会在此处停止。它是一个普通的监听器,在您的活动被销毁时调用onActivityResult。

public class MainActivity extends AppCompatActivity {
private RelativeLayout rLayout;
private Button bt,bt2;
private TextView tv;
private String s;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    rLayout=(RelativeLayout) findViewById(R.id.relativeLayout);
    tv=(TextView)findViewById(R.id.textView2);
    bt2=(Button)findViewById(R.id.button4);

    final Intent i=new Intent(getBaseContext(),MessageActivity.class);
    bt2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivityForResult(i, 1);
        }
    });
}//end of onCreate

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if(resultCode == RESULT_OK){
                s=data.getStringExtra("info");
                tv.setText(s);

            }
        }
    }
}

如果有效,接受并提出投票。