我有ListView
,其中包含 AutoCompleteTextView 和 EditText 。用户可以以编程方式添加新行并进行编辑。但是,当我添加两行或更多行时,我无法输入第二/第三行,依此类推 AutoCompleteTextView - 当我触摸 TextView 时,键盘出现但我无法输入任何内容因为它不再关注 AutoCompleteTextView 。这是我的适配器getView和xml的行设计。
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null) {
convertView = mInflater.inflate(R.layout.add_meal_activity_list_view_row, null);
holder = new ViewHolder();
holder.productNameTextView = (AutoCompleteTextView) convertView.
findViewById(R.id.mealPartAutoCompleteTextView);
holder.foodQuantityEditText = (EditText) convertView.
findViewById(R.id.mealQuantityEditText);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.foodQuantityEditText
.setText(Utilities.trimDecimalsToString(_mealParts.get(position).foodQuantity));
holder.foodQuantityEditText.addTextChangedListener(new FoodQuantityTextWatcher(position, holder.foodQuantityEditText));
//TODO here fetch real product names from web API
//TODO on item selected - pass to mealPart proudctId of chosen product
ArrayAdapter<String> productNamesAdapter = new ArrayAdapter<String>(_context, android.R.layout.simple_list_item_1, DATA);
holder.productNameTextView.setAdapter(productNamesAdapter);
holder.productNameTextView.addTextChangedListener(new ProductNameTextWatcher(position,holder.productNameTextView));
return convertView;
}
这是行定义。
<?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="45dp"
android:orientation="horizontal"
android:padding="5dp"
android:focusable="true"
android:focusableInTouchMode="true" >
<AutoCompleteTextView
android:id="@+id/mealPartAutoCompleteTextView"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="5"
android:completionThreshold="2"
android:inputType="textNoSuggestions"
android:textSize="15sp"
style="@style/ListTextView" />
<EditText android:id="@+id/mealQuantityEditText"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:inputType="number"
android:textSize="15sp"
style="@style/ListTextView"
/>
</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"
style="@style/ListViewStyle"
android:focusableInTouchMode="true"
android:focusable="true">
<EditText android:id="@+id/mealNameTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/mealNameTextViewHint"
style="@style/TitleTextViewStyle" />
<ListView android:id="@+id/mealPartsListView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<ImageButton
android:id="@+id/okMealButton"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="left"
android:src="@drawable/ic_action_accept"
android:contentDescription="@string/addMealPartButtonContentDescription"
android:onClick="onOkMealClick"
android:background="?android:selectableItemBackground"
android:padding="5dp">
</ImageButton>
<ImageButton
android:id="@+id/addMealPartButton"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="left"
android:src="@drawable/ic_action_new"
android:contentDescription="@string/addMealPartButtonContentDescription"
android:onClick="onAddMealPartButtonClick"
android:padding="5dp"
android:background="?android:selectableItemBackground">
</ImageButton>
<ImageButton
android:id="@+id/addFavouriteMeal"
android:layout_width="50dp"
android:layout_height="50dp"
android:gravity="left"
android:src="@drawable/ic_action_favorite"
android:contentDescription="@string/addMealPartButtonContentDescription"
android:onClick="onAddMealPartButtonClick"
android:padding="5dp"
android:background="?android:selectableItemBackground">
</ImageButton>
</LinearLayout>
</LinearLayout>
更新
我查看了LogCat,当我点击AutoComplete时,我无法专注于它,记录下这样的东西:
01-07 12:35:08.685:E / SpannableStringBuilder(29361):SPAN_EXCLUSIVE_EXCLUSIVE跨度不能为零长度
答案 0 :(得分:1)
您可以使用此功能获取edittext焦点 -
holder.foodQuantityEditText = (EditText) convertView. findViewById(R.id.mealQuantityEditText);
holder.foodQuantityEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(final View v, boolean hasFocus)
{
v.post(new Runnable()
{
@Override
public void run()
{
if (!v.hasFocus()) {
v.requestFocus();
v.requestFocusFromTouch();
}
}
});
}
});
答案 1 :(得分:0)
尝试一些像
这样的事情EditText etselect;
etselect.requestFocus(); // This will provide focus on that.
希望它对你有所帮助。!
答案 2 :(得分:0)
这似乎是您的特定设备的键盘错误。见Android - SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
您是否尝试过在模拟器或其他设备上进行测试?
此外,有些报告称更改inputType
设置已解决此问题。尝试一些不同的选择。由于您下载了AutoCompleteTextView
的选项,因此您可以尝试将此字段设置为none
:
android:inputType="none"
这用于回答Android Google Analytics SDK show "SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length"
答案 3 :(得分:-1)
AutoCompleteTextView不适用于ListView。
当显示键盘时,布局将调整大小或平移(滚动)以适合键盘和AutoCompleteTextView。因此,ListView必须刷新自身,这会使AutoCompleteTextView失去焦点,并且永远不会显示下拉列表。
我建议你改用ScrollView。
我不确定,但我认为如果您的适配器使用稳定的项ID,那么ListView将为特定项重用相同的视图,并且AutoCompleteTextView可能不会失去焦点。