我有一个由 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 时,listView 不会加载,直到我关注 EditText,就像它正在等待它一样。我尝试在加载 ListView 的代码之后设置 EditText,但问题仍然存在。