2016-05-27 20 views
0

私はImageButtonを持っています。ユーザーがそれをクリックすると、EditTextがレイアウトに追加されます。だから私が望むのは、各EditTextに一意のIDがあるということです。EditTextにIDをプログラムで割り当てます

a = 0; 
imgAddText.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (a <= 5) { 
      layoutAddText.addView(createEditText()); 
      a++; 
     } 
    } 
}); 

private EditText createEditText() { 
    final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    final EditText editText = new EditText(this); 
     return editText; 
} 
+0

createEditText()に同じeditTextを返すように見えます。それを "新しいEditText()"に変更するか、XMLから膨張させてください。 –

+0

申し訳ありませんが、質問を書いている間に行を削除しました。 –

答えて

1

実際にすべてのビューにsetIdメソッドがあります。あなたはそれを利用することができます。

setId(int id) 

代わりにsetTagを使用することを強くおすすめします。理由があなたの設定IDがfindViewId(int)で戻すために同じIDを使用していることを願っています。作成することにより、

editText.setTag(UUID.randomUUID().toString()); 

または一意なIDを生成する:あなたはcreateEditText()メソッドではfindViewWithTag(Object tag)

+0

ユーザーがボタンをクリックすると、ediitextが作成されます。私は、各edittextが同じではない一意のIDを持つようにしたい。 –

+0

ユースケースによっては、この回答が最も適切だと思います。 –

+0

作成されたすべてのIDは、長い値と膨大な数になります。 forループや固有の番号生成ロジックを使用してテキストを編集することができます。 – Sush

0

によって達成することができ、同じことが、この

EditText editText=(EditText)findViewById(R.id.edit); 
    editText.setLayoutParams(layoutParams); 
    editText.setId(R.id.edit); 
    return editText; 
+0

私は各edittextが同じではない一意のIDを持つことを望みます。 –

0

を試してみてくださいあなたは通りの代わりに、IDのタグを設定してみてくださいすることができますクラスのようなIdGenerator言う:その後、

public class IdGenerator() { 
    private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); 
    public static int generateViewId() { 
     for (; ;) { 
      final int result = sNextGeneratedId.get(); 
      int newValue = result + 1; 
      if (newValue > 0x00FFFFFF) newValue = 1; 
      if (sNextGeneratedId.compareAndSet(result, newValue)) { 
       return result; 
      } 
     } 
    } 
} 

を実行します。

editText.setId(IdGenerator.generateViewId()); 
関連する問題