【问题标题】:How to set edittext values after intent back to old activity?意图回到旧活动后如何设置edittext值?
【发布时间】:2014-03-17 17:53:49
【问题描述】:

我正在使用 Android。我在 Activity A 中有一个按钮和 EditText。当我单击该按钮时,它会转到带有 Intent 的 Activity B。我在活动 B 中有一个 ListView。我单击列表项并将值存储在字符串中,然后再次返回带有 Intent 的活动 A。现在我想在活动 A 的 EditText 字段中设置值。可以吗????

【问题讨论】:

  • 使用 OnActivityResult() 将结果从活动 B 传递到活动 A。
  • 当你去Activity B到Activity A时将String设置成Bundle
  • 是的,您可以在活动 A 中执行此 onresume() 方法。将值从活动 B 传递给活动 A。在活动 A 的 onresume 方法中设置 edittext 的值

标签: android android-intent android-activity


【解决方案1】:

您可以在 Intent 中的活动之间传递数据。以下是您在案例中构建代码的方式:

  1. 在您的 ActivityA 类中创建一个静态变量,该变量将用作请求代码:

    public class ActivityA extends Activity {
    
        //declare a static variable here, in your class
        public static final int ACTIVITYB_REQUEST = 100;    
    
  2. Activity A:当按钮被点击时,创建一个 Intent 并 startActivityForResult()

    Intent intent = new Intent(this, ActivityB.class);
    startActivityForResult(intent, ACTIVITY_REQUEST);
    
  3. 在活动 B 中:当单击一个项目时,将您的字符串存储在一个意图中并调用 setResult() 和 finish(),这将带您回到活动 A:

    //create an Intent
    Intent resultIntent = new Intent();
    
    //add your string from the clicked item
    resultIntent.putExtra("string_key", clicked_item_string);
    
    //return data back to parent, which is Activity A
    setResult(RESULT_OK, resultIntent);
    
    //finish current activity
    finish();
    
  4. 在活动 A 中:覆盖 onActivityResult(),检查返回的数据并相应地设置您的 EditText

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        //check if we are back from Activity B...
        if (requestCode == ACTIVITYB_REQUEST) {
            //and all went fine...
            if (resultCode == RESULT_OK) {
                //if Intent is not null
                if (data != null) {
    
                    //get your string 
                    String newString = data.getExtras().getString("string_key");
    
                    //set your EditText
                    someEditText.setText(newString);
                }
            }
        }
    }
    

【讨论】:

  • 公共静态最终 ACTIVITYB_REQUEST = 100;显示错误“最终无效类型”
  • 应该是 public static final int ACTIVITYB_REQUEST = 100;我忘了添加变量类型,即int...
  • 您需要在类中声明 ACTIVITYB_REQUEST 作为成员变量,而不是在任何方法中。查看更新的答案。
  • 我使用 onfocus 动作来编辑文本而不是按钮动作,以传递意图。有可能吗??
【解决方案2】:

是的,这是可能的。您需要简单地将值放入包中并通过意图将该包发送到活动 A。

Intent intent  = new Intent(ActivitA.this, ActivtyB.class);
intent.putExtra(name, value);
startActiivty(intent);

【讨论】:

    【解决方案3】:

    您要完成的有 2 个部分:将意图值本身传递给另一个 活动(大多数答案已经解释过了) 其次,如何修改 EditText 或 TextView 本身,因为如果你尝试 在 OnActivityResultMethod 中执行此操作,它不会直接工作,并且必须执行此解决方法:

    你可以强制一个 EditText.SetText("blablabla...");在您的 OnActivity 结果中 只需 3 个简单的步骤:

    1. 将布局重新加载到 Activity 中
    2. 重新绑定你的 EditText
    3. 照常使用 SetText。

    在这个示例代码中,我传递了一个带有意图的 URL 字符串并将其写入 TextView:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {       
        if (resultCode == RESULT_OK) 
        {
            QRdata= data.getStringExtra("QRURL");
    
            if (QRdata.length()>0)
            {
                                //Step1
                setContentView(R.layout.activity_confirmpackage); 
                                //Step2
                TextView qrtxt=(TextView)this.findViewById(R.id.qrurl); 
                                //Setp 3,Voilà!
                qrtxt.setText(QRdata.toString()); 
            }
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2015-05-08
      相关资源
      最近更新 更多