2011-07-28 6 views
4

こんにちは私は図に示すようにExpandableListViewを表示するアクティビティを作ろうとしています。EditTexts inside ExpandableListView

グループをクリックすると、展開され、Textviewとeditextを持つLinearLayoutが表示されます。

右の問題は、EditTextをクリックするとフォーカスが得られず、フォーカスを取得してキーボードを表示するために2回タップしなければならないことです最初に何も表示されませんが、キーボードを隠すとEditTextは入力したテキストで更新されます

私はandroid:descendantFocusability = "afterDescendants"をexpandableListVieレイアウトに追加しようとしましたが、同じ。

任意のアイデア??または私はこのレイアウトを実装することができる他の方法?

Expandable ListView with EditText

+0

ねえuが私を助けてくださいすることができます。このグループ項目が折りたたまれたときにedittextの値を取得する方法を教えてください。この編集テキスト値をbotomボタンイベントに使用したい –

+0

jucas、この問題の解決策を見つけましたか? –

答えて

1

は私が焦点を当て、問題を解決する方法がわからないですが、あなたは崩壊し、EDITTEXT内のテキストを見るためにグループを展開する必要がある理由を私は知っています。あなたがスクロールしたり、リストビューを展開したり折り畳んだりしない限り、リストビューは更新されません。ですから、この問題を解決するには、リストビュー内のeditTextの値になる文字列のリストを作成することをお勧めします。その後editTextsごとにonKeyClick()リスナーを作成し、これを実行します。ここでは何が起こる

editText1.setOnKeyListener(new EditText.OnKeyListener() 
{ 
    public boolean onKey(View editText, int keyCode, KeyEvent keyEvent) 
    { 
     // Get the position of the item somehow 
     int position = 4; 
     // Get value from List<String> for editTexts 
     String textValue = listOfValues.get(position); 
     textValue = ((EditText)editText).getValue(); 
     adapter.notifyDataSetChanged(); 
     return false; 
    } 
}); 

すると、キーが押された後のEditTextの値を取得している、との値を変更しているということですリスト内の新しい文字列を新しい値に置き換えます。次に、項目の1つの値が変更され、リフレッシュする必要があることをアダプターに伝えます。これは問題を効率的に解決する方法ではありませんが、より良い方法を考えることができない場合のバックアップソリューションです。

+0

しかし、listOfValuesで正確に何をしたらいいのですか? –

+0

'textValue'という文字列がlistOfValuesの文字列にバインドされているため、listOfValuesで何もする必要はありません。したがって、textValueの値が変更されると、listOfValuesの値が変更されます。 –

1

は常にその特定edittextにTEMPおよびsettext()値のデータをチェックする機能

String temp; 

editText.addTextChangedListener(new TextWatcher() { 

    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 

    } 
    public void beforeTextChanged(CharSequence s, int start, int count, 
    int after) { 
     // TODO Auto-generated method stub 

    } 

    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 

     temp = s.toString();//editText.getText().toString(); 

     childValues[groupPosition][childPosition][]= temp ; 

     Toast.makeText(context, ""+childValues[groupPosition][childPosition], Toast.LENGTH_SHORT).show(); 
    } 
}); 

getChild()機能でを使用して、文字列変数にEDITTEXTの値を格納しよう。

6

は、Android後にマニフェスト右にこれを追加します。あなたの活動の名前

android:windowSoftInputMode="adjustPan" 
0

は、次の2つのものを追加する必要があります。あなたの活動のマニフェストに

1)expandableListView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

2)()android:windowSoftInputMode="adjustPan"