1

私は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...
}

それはまったく可能ですか、それとも長い道のりのコーディングを経る必要がありますか?

4

3 に答える 3

1

関数 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はお勧めできません。1 文字だけを保存するために、コードに多くの混乱が生じる可能性があります。

于 2013-01-26T18:45:32.117 に答える
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 -==文字列の比較には絶対に使用しないでください。常に機能するとは限りません!!

于 2013-01-26T18:01:17.533 に答える
0

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-01-30T19:11:55.660 に答える