【问题标题】:How to put variable value inside another variable name如何将变量值放在另一个变量名中
【发布时间】:2013-01-26 17:36:19
【问题描述】:

我正在开发 Eclipse ADT。我遇到了需要检查多个 EditText 字段的任务,因此我决定可以使用 FOR 循环以更少的编码检查所有这些字段。

例如我有:

EditText editTxt1 = (EditText) findViewById(R.id.editText1);
EditText editTxt2 = (EditText) findViewById(R.id.editText2);
EditText editTxt3 = (EditText) findViewById(R.id.editText3);
EditText editTxt4 = (EditText) findViewById(R.id.editText4);
...

我想用 for 循环检查它们:

int x;

for (x=3; x<=4; x++) {
    if (editTxt"x".getText().toString().equals("something")) do smthng...
}

有没有可能,还是我必须经历很长的编码?

【问题讨论】:

  • 不可能,但你可以使用EditTexts的数组。
  • 你能举个例子吗?我知道最初我必须将所有edittext ids'定义到一个数组中......
  • 你能这样做吗:List list = new ArrayList(); list.add((EditText) findViewById(R.id.editText1));以此类推,然后您可以使用 for 循环访问列表

标签: java android variables


【解决方案1】:

正如 Quoi 指出的那样,您可以通过反射来做到这一点,但这通常不是一个好主意。

最好将您的对象添加到列表或地图中:

List<EditText> list = new ArrayList<EditText>();
EditText editTxt1 = (EditText) findViewById(R.id.editText1);
list.add(editTxt1);
EditText editTxt2 = (EditText) findViewById(R.id.editText2);
list.add(editTxt2);
EditText editTxt3 = (EditText) findViewById(R.id.editText3);
list.add(editTxt1);
EditText editTxt4 = (EditText) findViewById(R.id.editText4);

现在我们可以循环浏览列表并使用索引来检查正在调用的编辑文本。

int i = 0;
for (EditText e : list) {
    if(e.getText().toString().equals("something")) {
        System.out.println("editText" + i + " equals something");
        // do stuff
    }
    i++;
}

您也可以使用 Map 来执行此操作,这将允许您针对对象使用名称值,以帮助您更好地参考来检查正在调用的对象。这需要更多的工作,但可能会使用

Map<EditText, String> map = new HashMap<EditText, String>();
EditText editTxt1 = (EditText) findViewById(R.id.editText1);
map.put(editTxt1, "editTxt1");
EditText editTxt2 = (EditText) findViewById(R.id.editText2);
list.add(editTxt2, "editTxt2");

for (Entry<String, String> e : map.entrySet()) {
    if(e.getValue().equals("something")) {
        System.out.println(e.getKey() + " was equal to somethihng");
    }
}

PS - Never use == to compare Strings, it won't always work!!

【讨论】:

    【解决方案2】:

    您必须使用函数 getIdentifier();类似:

    int id = getResources().getIdentifier("editText" + x, "id", this.getPackageName());
    EditText editTxt = (EditText) findViewById(id);
    
    if (editTxt.getText().toString().equals("something")) do smthng...
    

    另外,使用editTxt 之类的东西而不是editText 不是一个好主意:为了只保存一个字符,您会在代码中添加很多可能的混淆。

    【讨论】:

      【解决方案3】:

      我受到 Anton 的 Kovalenko 评论的启发,寻找他建议的解决方案。 在我看来,这种方式更干净,编码更少。

      我将它分享到此处列出的其他解决方案中。

      EditText[] editTextArr;
      editTextArr = new EditText[4];
      
      editTextArr[0] = (EditText) findViewById(R.id.editText1);
      editTextArr[1] = (EditText) findViewById(R.id.editText2);
      editTextArr[2] = (EditText) findViewById(R.id.editText3);
      editTextArr[3] = (EditText) findViewById(R.id.editText4);
      

      现在我们可以使用 FOR 循环检查 edittext 字段,如下所示:

      int i;
      for (i=0; i<12; i++) {
          if (editTextArr[i].getText().toString().equals("something")) do smthng....
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-23
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        相关资源
        最近更新 更多