【发布时间】:2012-09-29 00:11:51
【问题描述】:
我有一个由 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,但问题仍然存在。
【问题讨论】:
标签: android listview keyboard android-edittext hide