3

ListView(AsynTaskからロード)とEditText(そのリストをフィルタリングできるようにする)で構成されるLinearLayoutがあります。コードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Filtrar por nombre..." >

    </EditText>

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

問題は、アクティビティが開始されるとキーボードが表示され、EditTextが検索のためにクリックされたときにのみ表示したいということです。

マニフェストに次のように書くなど、いくつかの方法を試しました

android:windowSoftInputMode="stateHidden"

これをクラスに含める

InputMethodManager iMM = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
iMM.hideSoftInputFromWindow(editText.getWindowToken(), 0);

私が達成した唯一のことは、キーボードを表示せず、リストのロードされたもの(EditTextと画面の残りの部分だけを真っ黒)を表示しないことです。EditTextをクリックすると、キーボードとlistViewのもの。

これに対する可能な解決策はありますか?

編集:

私は次の解決策を試しました(@ Sush、@ boztalay、@ Agata Sworowskaに感謝します)が、どれもうまくいきませんでした。

-私のレイアウトに配置:

android:focusable="true"
android:focusableInTouchMode="true"

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

-そして私のonCreate()メソッドに配置されます:

ListView listView = findViewById(R.id.list);
listView.setFocusableInTouchMode(true);
listView.requestFocus();

他の可能性はありますか?

新しい編集:

EditTextにフォーカスされていない場合、それを待っていた場合と同様に、EditTextにフォーカスを戻すまでlistViewがロードされないことに気づきました。ListViewをロードするコードの後に​​EditTextを設定しようとしましたが、問題は解決しません。

4

4 に答える 4

2

これはフォーカスの問題のように聞こえます。何が起こっているかというと、アプリが起動され、EditText がフォーカスされ、キーボードがポップアップします。ListView がフォーカスされるようにする必要があります。このように、ユーザーが EditText をクリックしてフォーカスを与えるまで、キーボードはポップアップしません。

Java では、ListView のインスタンスを取得してから、いくつかの関数を呼び出す必要があります。

ListView listView = findViewById(R.id.list);
listView.setFocusableInTouchMode(true);
listView.requestFocus();

それを onCreate() に入れると、フォーカスが ListView に与えられ、ユーザーが EditText をクリックするまでキーボードは表示されません。

詳細については、この SO の質問を参照してください。

于 2012-10-08T18:18:37.303 に答える
1

EditTextを含むレイアウトに次を追加してみてください。

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

お役に立てば幸いです。

于 2012-10-08T19:34:01.753 に答える
1

http://www.mysamplecode.com/2012/02/android-edittext-hide-soft-keyboard.html

これは、ここで問題に対して見つけた解決策です。listivew がこれを行う理由がわかりませんが、回避策が役に立ちます。

于 2013-01-14T09:08:08.227 に答える
1

以下の 2 つの属性を LinearLayout に追加するだけです。

android:focusable="true"
android:focusableInTouchMode="true"
于 2012-10-08T18:20:25.680 に答える