0

EditTextのフッターとして使用している がViewありますListView。フォーカス イベントにアクセスしようとしていますが、何らかの理由で、フォーカスごとに複数回発生しています。ここで何が起こっているのですか?

// in onCreate

// ...

// the footer
View v = getLayoutInflater().inflate( R.layout.comment_edittext, null );

EditText commentEditText = (EditText)v.findViewById( R.id.comment_edittext );
commentEditText.setOnFocusChangeListener( new OnFocusChangeListener() {

    @Override
    public void onFocusChange( View v, boolean hasFocus )
    {
        U.log("View: " + v.getClass().getName().toString() );

        if( hasFocus )
        {
            U.log( "Clicked" );
        }
        else
        {
            U.log( "Un Clicked" );
        }
    }
} );

// add the footer
commentListView.addFooterView( v );

// ...

キーボードを表示する 1 回のタッチの出力は次のとおりです。

04-11 10:22:17.449: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.459: E/004 - X(4576): Clicked
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.569: E/004 - X(4576): Un Clicked
04-11 10:22:17.569: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.569: E/004 - X(4576): Clicked
04-11 10:22:17.689: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.689: E/004 - X(4576): Un Clicked
04-11 10:22:17.709: E/004 - X(4576): View: android.widget.EditText
04-11 10:22:17.709: E/004 - X(4576): Clicked

hasFocusset to を使用して複数のイベントを呼び出していることはある程度理解できますが、ログをトリガーする strueも存在するのはなぜですか?falseUn Clicked

編集:ListViewさらに、上下にスクロールしEditTextてビューの内外を移動すると、これらのイベントも呼び出されます。おそらく間違ったリスナータイプを使用していますか?

4

3 に答える 3

1

個人的な経験から、ListViews 内の EditTexts は悩みの種です。ビューが再利用およびレンダリングされる方法が原因で、フォーカスの動作がおかしくなりました。別の方法で問題にアプローチすることをお勧めします。本当はコメント欄なら常時表示の方がいいんじゃないの?

サンプル レイアウト:

  <LinearLayout 
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"> 
    <ListView 
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1"/> 
    <EditText 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"/>  
  </LinearLayout>
于 2012-04-11T15:40:20.183 に答える
1

代わりに GridView を使用し、numColumns を 1 にします。Java クラスでの読み取り方法が気に入らない場合は、それらを AbsListView として保存します (xml で GridView として保存します)。

ListView は EditTexts にバグがあり、GridViews にはこれらの問題がありません。

于 2013-11-13T19:17:19.123 に答える