Android 如何在编辑文本中隐藏键盘+;列表视图布局

Android 如何在编辑文本中隐藏键盘+;列表视图布局,android,listview,keyboard,android-edittext,hide,Android,Listview,Keyboard,Android Edittext,Hide,我有一个由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_h

我有一个由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>
把这个也包括在课堂上

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()方法中:

还有其他可能性吗

新编辑:


我注意到,当它不聚焦于EditText时,listView不会加载,直到我聚焦回EditText,就像它在等待它一样。我尝试在加载ListView的代码之后设置EditText,但问题仍然存在。

这听起来像是焦点问题。当应用程序启动时,编辑文本获得焦点,键盘弹出。您应该尝试使其成为ListView的焦点。这样,在用户单击EditText焦点之前,键盘不会弹出

在Java中,您应该获得ListView的一个实例,然后调用几个函数:

ListView listView = findViewById(R.id.list);
listView.setFocusableInTouchMode(true);
listView.requestFocus();
如果将其放在onCreate()中,则会将焦点放在ListView上,并且在用户单击EditText之前,它们不会出现在键盘上


有关更多详细信息,请参阅。

您可以将以下两个属性添加到线性布局中

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

尝试在包含以下编辑文本的版面中添加:

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
我希望有帮助。


这是我在这里找到的解决方案。我不明白listivew为什么要这样做,但解决方法会有所帮助。

这是一个更好的方法,但您仍然需要调用requestFocus(),ListView才能真正获得焦点。@boztalay:ListView需要焦点吗?线性布局将保持焦点,以避免EditText在默认情况下获得焦点。所以我觉得这两行应该可以解决这个问题。我不认为ListView需要焦点,但是EditText会自动请求它,所以需要以某种方式停止这种行为。这两行只能使列表视图具有焦点。我已经按照您所说的放置了您的代码,但恐怕这只会使什么都看不出来。EditText确实没有聚焦,但是ListView没有显示。我已经按照您所说的,将您的代码放在我的LinearLayout中,但我担心这只会导致什么都没有显示。EditText确实没有聚焦,但是ListView没有显示。很抱歉,这也不起作用。将此代码放在您所说的位置(在我的onCreate方法中),当布局加载时,键盘就会出现。我恐怕这也没有起到作用。我想这是因为我没有按钮(如示例中所示),而是有一个需要加载的listView,因为它在我按下/聚焦editText之前不会出现。谢谢你的努力!
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"