【发布时间】:2013-07-04 23:12:34
【问题描述】:
我创建了一个简单的ListView,其中每一行都是一个EditText。这是我的R.layout.item:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine">
</EditText>
注意EditText 如何通过android:inputType="textMultiLine" 标志允许多行输入。通过ArrayAdapter,我用许多行填充ListView,以便ListView 可以滚动。在我的情况下,项目是 40。这是我的MainActivity.java:
public class MainActivity extends ListActivity {
final int NUM_ITEMS = 40;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] items = new String[NUM_ITEMS];
for (int i = 0; i < NUM_ITEMS; i++) {
items[i] = Integer.toString(i);
}
setListAdapter(new ArrayAdapter<String>(this, R.layout.item, items));
}
}
我向下滚动到第 20 行并开始输入文本,但是当我到达行尾并且 EditText 更改其大小以适应第二行时,ListView 突然自动滚动到最佳。
我认为所描述的行为是一种糟糕的用户体验,我很难理解为什么它应该是默认行为。我寻找的行为是让上面的行保持不变,让下面的行移动必要的数量,以便为扩展的EditText 留出空间。我怎样才能实现它?
一些附加信息,我在针对 Android 4.2.2 的模拟器上运行此代码,该设备是 3.2 英寸 HVGA 滑块 (ADP1)。我选择了该特定设备来重现用户遇到的错误。
【问题讨论】:
-
我建议不要混合 EditTexts 和 ListViews,因为焦点和回收,这都是一个巨大的痛苦。如果您不打算拥有那么多 EditText,我建议您只使用 ScrollView。
-
不幸的是,我在 ListView 中围绕 EditTexts 构建了整个应用程序概念。你可以查看my app 了解为什么我不能真正改变它:) 但你是对的,这是一个巨大的痛苦。