在我的应用程序中,我有一个活动A,它引用了一个活动B。现在,我正在尝试从活动A中的活动B获取所有EditTexts。在伪代码中,代码如下所示:
public class A extends Activity{
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
BActivity B = BActivity.safeGetInstance();
/**
* Get EditTexts of Activity B here
*/
}
}我没有关于活动B的更多信息,因为它不属于我的应用程序。我唯一知道的是BActivity扩展了Activity。可以得到B的Edittexts吗?
提前感谢
托比
发布于 2015-03-06 22:11:04
当您使用活动A(即启动器)时,活动B还不存在。如果要从活动B获取数据,请使用startActivityForResult方法。它会在你销毁B之后给你返回数据,所以当B还没有创建的时候,你不能从A得到一些东西。
练习B
public class ActivityB extends Activity implements View.OnClickListener {
TextView yourView;
Button startA;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
yourView = (TextView) findViewById(R.id.tvName);
startA = (Button) findViewById(R.id.start_button);
startA.setOnClickListener(this);
}
// start A on click
@Override
public void onClick(View v) {
Intent intent = new Intent(this, ActivityA.class);
startActivityForResult(intent, 1);
}
/**
*
* @param requestCode
* @param resultCode
* @param data - resultData from A
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
int dataFromA = data.getIntExtra("result",1);
if(dataFromA == 0){
yourView.setFocusable(false);
}else{
yourView.setFocusable(true);
}
}}
练习A
public class ActivityA extends Activity implements View.OnClickListener {
EditText etName;
Button btnOK;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etName = (EditText) findViewById(R.id.etName);
btnOK = (Button) findViewById(R.id.btnOK);
btnOK.setOnClickListener(this);
}
//finished activity A and return to B with result
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("result", 0);
setResult(RESULT_OK, intent);
finish();
}}
发布于 2015-03-06 22:12:39
你没有理由尝试这样做。
如果目标是获取这些EditTexts中的值,您应该将它们存储在数据库/首选项中的某个位置,或者可能在onActivityResult()中返回它们。
要知道,Android不能保证其他活动的记忆仍然有效。活动从左到右被销毁(和重建)。
如果目标是在应用程序之间进行通信(如您所指出的),则此BActivity应该使这些值可用,例如通过内容提供商。
忘了在GUI级别解决这个问题吧。
发布于 2015-03-06 22:28:59
假设您在活动A中,并调用活动B,
public void startNextActivity() {
Intent intent = new Intent(this, ActivityB.class);
startActivityForResult(intent, SOME_UNIQUE_INTEGER_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
boolean showEditText = data.getBooleanExtra("show", false);
if (showEditText) {
// handle your edit text visibility.
}
}在活动B中,当用户离开时,在某处(例如:onBackPressed)
Intent intent=new Intent();
intent.putExtra("show", trueOrFalse);
setResult(SAME_UNIQUE_INTEGER_REQUEST_CODE_YOU_SPECIFIED,intent);
finish();//finishing activity 现在,当完成时,onActivityResult将在活动A中触发。在那里处理您的UI状态。
https://stackoverflow.com/questions/28900361
复制相似问题