2016-06-11 4 views
1

EditTextをFragmentに動的に追加したいと思います。 このEditTextにString idを追加したいと思います。 次のコードは、ボタンを押した後に呼び出されます。EditTextを(可能であれば)フラグメントに動的に追加する

int number_of_editTexts; //At the beginning=0 
Context context = getActivity(); 
EditText editText = new EditText(context); 
editText.setId("NofET"+number_of_editTexts); 
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 

params.addRule(RelativeLayout.CENTER_HORIZONTAL); 
editText.setLayoutParams(params); 
RelativeLayout rel=(RelativeLayout) getView().findViewById(R.id.list); 
rel.addView(editText); 
number_of_editTexts++; 

それはのEditTextが追加されますが、私はeditText.setId("NofET"+numer_of_editTexts); but only editText.setId(numer_of_editTexts);

を書き込むことはできませんが、私がやりたいが方法は何ですか? また、どうすればparams.addRule(RelativeLayout.BELOW,R.id.DYNAMIC_ID)のようにすることができますか?

+0

IDは常に整数値です。コンパイルすると、xml IDはint型に丸められます。 – SQLiteNoob

+0

質問の最初の部分については、http://stackoverflow.com/questions/22527883/android-set-edit-text-or-text-view-id-programmaticallyを参照してください。 –

+0

あなたが達成しようとしているレイアウトの図を含めることができます場合は、おそらく私はあなたを助けることができます。 –

答えて

0

要素IDは純粋な整数であり、文字列として設定することはできません。 XMLで作成された要素に割り当てられたIDは、内部的に整数に変換され、intとして格納されます。

動的に作成される要素のIDは、デフォルトで常に-1です。 setID()を使用して手動でIDを割り当てることはできますが、システムによって自動的に作成された他のIDとの衝突の可能性があります。

このような衝突を防ぐために、this answerに記載されている方法を使用して、手動でIDを割り当てることができます。

EDIT:基本的には、リンクを使用すると、APIレベル17+を持っている場合、あなたはそれを手動で行う場合は、これらがために予約されているとして、あなたはIDとして0x00FFFFFFの上に行かないView.generateViewId()他に使用することを言います静的に作成された要素。それ以外の場合は、コードで作成されたID間の競合を避けてください。

ただし、この質問の場合は、LinearLayoutを使用する方がよいでしょう。

これがあなたのXMLだとします。

<LinearLayout 
     android:id="@+id/list" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:orientation="vertical" 
     android:gravity="center_horizontal"/> 

これにのEditTextを追加するためのJavaコードは、次のようなものになることがあります。

List<EditText> edittexts; 
... 
LinearLayout rel=(LinearLayout) getView().findViewById(R.id.list); 
... 

void addEditText(Context myContext,int edittextno) 
{ 
    EditText ed=new EditText(myContext); 
    ed.setText("EditText"+edittextno); 
    LayoutParams lParamsMW = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
    ed.setLayoutParams(lParamsMW); 
    edittexts.add(ed); 
    rel.addView(ed); 
} 

あなたがリストedittextsによって作成されたすべてのEditTextsを変更することができます。

垂直のLinearLayoutは、OPで必要とされる垂直方向のリスト形式を自動的に与えます。必要に応じて、追加された各要素にマージンを追加することができます。 EditTextの左または右に要素を追加する必要がある場合、水平のLinearLayoutが動的に作成され、要素が追加され、Horizが追加されます。 LinearLayoutは、上記のコードと同様の方法で静的なものに追加されました。

+0

私は、EditTextsを膨らませるArrayAdapterがもっと良い解決策であると感じています –

+0

いずれにしても、追加するビューにLayoutParamsを設定したい場合があります –

+0

ArrayAdapterは各行(今のところ行)には複数の要素があります。 また、RelativeLayoutに関連するLayoutParamsだけがIDを必要とすると思います。 'RelativeLayout.BELOW'、' RelativeLayout.RIGHT_OF' –

関連する問題