2

ListView で EditText を使用すると、EditText の FocusChange の動作が異なることがわかりました。テスト プログラムには 2 つの EditText があります。アクティビティに一度、リストビューにもう 1 つ。

以下は、通常の Editext でテキストを入力してフォーカスを失ったときのログです。

10-11 16:26:32.440: INFO/Test(4317): 1:onFocusChange:false
10-11 16:26:32.490: INFO/Test(4317): 2:onFocusChange:true

以下は、リスト ビューで Editext にテキストを入力し、フォーカスを失ったときのログです。

10-11 16:28:17.551: INFO/Test(4317): 2:onFocusChange:false
10-11 16:28:17.609: INFO/Test(4317): 2:onFocusChange:true
10-11 16:28:17.679: INFO/Test(4317): 2:onFocusChange:false
10-11 16:28:17.719: INFO/Test(4317): 1:onFocusChange:true

ログには、リスト ビューの EditText が 1 回以上フォーカス変更をトリガーすることが示されています。この動作はバグかどうか

私はAndroid 4.0.3 SDKを使用しています。

以下はXMLです

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/editText1" android:layout_gravity="center"/>
    <ListView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"

            android:id="@+id/listView"/>
</LinearLayout>

ここにコードがあります

public class EditTextActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.edit_text_activity);

        final EditText editText = (EditText) findViewById(R.id.editText1);
        editText.setWidth(200);
        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                Log.i("Test", "1:onFocusChange:" + hasFocus);
                editText.setText("");
            }
        });

        ListView listView = (ListView) this.findViewById(R.id.listView);
        listView.setAdapter(new BaseAdapter() {
            @Override
            public int getCount() {
                return 1;
            }

            @Override
            public Object getItem(int i) {
                return null;
            }

            @Override
            public long getItemId(int i) {
                return 0;
            }

            @Override
            public View getView(int i, View view, ViewGroup viewGroup) {
                LinearLayout layout = new LinearLayout(viewGroup.getContext());

                final EditText editText = new EditText(viewGroup.getContext());
                editText.setId(1);
                editText.setLayoutParams(new ViewGroup.LayoutParams(200,ViewGroup.LayoutParams.WRAP_CONTENT));
                editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                    @Override
                    public void onFocusChange(View view, boolean hasFocus) {
                        Log.i("Test", "2:onFocusChange:" + hasFocus);
                        editText.setText("");
                    }
                });

                layout.addView(editText);

                return layout;
            }
        });

    }
}
4

4 に答える 4

0

これには getter setter メソッドを使用する必要があります。私はまた、以下のリンクの助けを借りてこれを試しました. https://looksok.wordpress.com/2012/11/03/android-custom-listview-tutorial/ 頑張って ください

于 2015-08-20T16:31:24.063 に答える
0

edittext がフォーカスを失ったり回復したりするのはバグではありません。キーボードのキーを押すとそのキーがフォーカスされますが、キーを離すと edittext にフォーカスが戻ります。あなたは何をしようとしているのですか?edittext は検索に使用され、リストビューに追加されていますか?

于 2013-11-27T10:08:25.577 に答える
0

editTextを使用して、アクティビティに次の行を追加する必要があります

android:windowSoftInputMode="adjustPan"

それからあなたのlistViewは持っている必要があります

android:descendantFocusability="beforeDescendants"

ソース: http://androidtechnicalblog.blogspot.ch/search/label/ListView

于 2016-04-26T13:34:51.313 に答える
-1

アクティビティのマニフェストに以下を追加します-

android:windowSoftInputMode="adjustPan"
于 2013-10-11T08:35:59.093 に答える