当我在主要开始新活动(message.java)中点击按钮并且我正在尝试从消息活动中获取数据时,我有 2活动 到 mainActivity 。在消息活动中,我有edittext,当点击按钮返回mainactivity并在textview中显示该信息。这段代码工作但问题是当我点击 mainActivity 中的按钮时 它首先删除textview的文本,然后消息活动开始。这不是我想要的,而且,它从消息活动获取信息,但是在 mainActivity 中我必须再次点击mainActivtiy按钮以在textview中显示。有什么建议吗?
这就是我想要的
此图显示问题
父母 - >的 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();
}
});
}
}
答案 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);
}
}
}
}
如果有效,接受并提出投票。