从引用的Activity获取EditTexts

时间:2015-03-06 13:58:36

标签: java android android-edittext rhomobile

在我的应用程序中我有一个活动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?

先谢谢

托比

3 个答案:

答案 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状态。