Android - 更改活动后设置文本

时间:2014-06-29 16:09:11

标签: android android-intent

我有两个活动:MainActivity和SecondActicity。 在MainActivity上,我单击一个按钮,然后转到SecondActicity:

public void GoToSeconActivity(View view) {
    Intent intent = new Intent(this, secondActivity.class);;
    startActivity(intent);
}

在secondActivity上我点击一个按钮,然后我回到MainActivity并发送额外内容:

public void goBackToMainActivity() {
    Intent intent = new Intent(getBaseContext(), MainActivity.class);
    intent.putExtra("myVar", myVar);
    startActivity(intent);
}

on MainActivity&on; onCreate我想在EditText中显示 myVar

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
        .add(R.id.container, new PlaceholderFragment())
        .commit();
    }

    Bundle extras = getIntent().getExtras();
    if (extras != null) 
    {
        View myView = getLayoutInflater().inflate(R.layout.fragment_main, null);
        EditText myVarEdittext1 =   (EditText)myView.findViewById(R.id.myVarEditText);
        string str = extras.getString("myVar");
        myVarEdittext1.setText(str, TextView.BufferType.EDITABLE);
    }
}

但它不起作用。 我尝试在setText之后添加myVarEdittext1.postInvalidate();,但它没有帮助。 我也尝试将此代码放在

 mHandler.post(new Runnable() {
     @Override
    public void run() {
        View myView = ....
        //...
        myVarEdittext1.setText(str, TextView.BufferType.EDITABLE);
    }
 });

它也没有帮助......

我还能做什么?没有例外 - 但editText仍为空。

3 个答案:

答案 0 :(得分:0)

您需要覆盖onActivityResult中的MainActivity并从中提取myVar

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    string str = data.getString("myVar");
}

您还需要将来电从startActivity更改为startActivityForResult

Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, 1);

答案 1 :(得分:0)

添加获取Intent数据的代码,并在EditText上设置文字。

Bundle extras = getIntent().getExtras();
    if (extras != null) 
    {
        View myView = getLayoutInflater().inflate(R.layout.fragment_main, null);
        EditText myVarEdittext1 =   (EditText)myView.findViewById(R.id.myVarEditText);
        string str = extras.getString("myVar");
        myVarEdittext1.setText(str, TextView.BufferType.EDITABLE);
    }

您似乎没有完成Activity,因此未调用onCreate(),但会调用onResume()

您也可以使用startActivityForResult()

Here is an example of that

Activity Lifecycle

答案 2 :(得分:0)

如果您的第二个活动将数据返回给您的MainActivity,那么您应该使用“startActivityForResult”在MainActivity中启动SecondActivity。 然后,当您在应用程序中启动SecondActivity时,您必须以不同的方式返回MainActivity。 使用Uri将数据返回到MainActivity。 这是高级Android开发作为初学者,你不应该追求这些东西。 如果你想了解更多关于我给你的Sub-Activity,请执行一些谷歌搜索和子活动的例子,并从中返回数据。