首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从引用的活动中获取EditTexts

问从引用的活动中获取EditTexts
EN

Stack Overflow用户
提问于 2015-03-06 21:58:36
回答 3查看 52关注 0票数 0

在我的应用程序中,我有一个活动A,它引用了一个活动B。现在,我正在尝试从活动A中的活动B获取所有EditTexts。在伪代码中,代码如下所示:

代码语言:javascript
复制
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吗?

提前感谢

托比

EN

回答 3

Stack Overflow用户

发布于 2015-03-06 22:11:04

当您使用活动A(即启动器)时,活动B还不存在。如果要从活动B获取数据,请使用startActivityForResult方法。它会在你销毁B之后给你返回数据,所以当B还没有创建的时候,你不能从A得到一些东西。

练习B

代码语言:javascript
复制
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

代码语言:javascript
复制
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();
}

}

票数 0
EN

Stack Overflow用户

发布于 2015-03-06 22:12:39

你没有理由尝试这样做。

如果目标是获取这些EditTexts中的值,您应该将它们存储在数据库/首选项中的某个位置,或者可能在onActivityResult()中返回它们。

要知道,Android不能保证其他活动的记忆仍然有效。活动从左到右被销毁(和重建)。

如果目标是在应用程序之间进行通信(如您所指出的),则此BActivity应该使这些值可用,例如通过内容提供商。

忘了在GUI级别解决这个问题吧。

票数 0
EN

Stack Overflow用户

发布于 2015-03-06 22:28:59

假设您在活动A中,并调用活动B,

代码语言:javascript
复制
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)

代码语言:javascript
复制
Intent intent=new Intent();  
intent.putExtra("show", trueOrFalse);  
setResult(SAME_UNIQUE_INTEGER_REQUEST_CODE_YOU_SPECIFIED,intent);  
finish();//finishing activity  

现在,当完成时,onActivityResult将在活动A中触发。在那里处理您的UI状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28900361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档