AutoCompleteTextView失去焦点

时间:2014-01-01 23:15:21

标签: android

我有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跨度不能为零长度

4 个答案:

答案 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可能不会失去焦点。