在我的应用程序中我有一个活动A,其中有一个活动B的引用。现在我试图从活动A中的活动B获取所有的EditTexts。在Pseudocode中,代码看起来像:
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?
先谢谢
托比
答案 0 :(得分:0)
当您使用活动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();
}
}
答案 1 :(得分:0)
你没有理由尝试这个。
如果目标是获取这些EditTexts中的值,则应将它们存储在数据库/首选项中的某个位置,或者可以在onActivityResult()中返回它们。
了解Android并不保证其他活动的内存仍然有效。活动被左右摧毁(并重新创建)。
如果目标是在应用程序之间进行通信(如您所示),则此BActivity应该使这些值可用,例如通过内容提供商。
忘记在GUI级别解决这个问题。
答案 2 :(得分:0)
假设您在活动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
现在,完成后,将在活动A中触发onActivityResult
。在那里处理您的UI状态。