繁体   English   中英

在ListView项目中识别AutocompleteTextView

[英]Identify AutocompleteTextView in ListView Item

我有几个AutocompleteTextView作为ListView中的项目; 这些项目是使用“自定义”适配器动态加载的。 当在AutoCompleteTextView中选择一个项目时,我需要更新与AutoCompleteTextView在同一行的另一个TextView。 我在确定选择项目的AutoCompleteTextView的位置时遇到麻烦。 任何指针将不胜感激:

我的活动如下所示,其中定义了Listview:

<ListView
            android:id="@+id/listview_orders"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />

ListView项目在另一个布局文件中定义为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <AutoCompleteTextView
        android:id="@+id/product_code_row_item"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"

        android:ems="10" />

    <AutoCompleteTextView android:id="@+id/product_name_row_item"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        />

    <TextView android:id="@+id/product_size_row_item"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        />



</LinearLayout>

ListView适配器的设置如下:

ListView view = (ListView) findViewById(R.id.listview_orders);
        ListViewItemAdapter adapter = new ListViewItemAdapter(this, orderItems, prodCodeList, prodNameList);
        view.setAdapter(adapter);

定制适配器的getView方法实现如下:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            LayoutInflater inflater = activity.getLayoutInflater();
            convertView = inflater.inflate(R.layout.order_list_row, null);
        }
        AutoCompleteTextView  productCode = (AutoCompleteTextView ) convertView.findViewById(R.id.product_code_row_item);
        AutoCompleteTextView productName = (AutoCompleteTextView) convertView.findViewById(R.id.product_name_row_item);

        TextView productSize = (TextView) convertView.findViewById(R.id.product_size_row_item);
        TextView mQty = (TextView) convertView.findViewById(R.id.product_mqty_row_item);




        OrderItem orderItem = (OrderItem)orderItemList.get(position);

        productCode.setText(orderItem.getProductCode());
        productCode.setTag(position);

        productName.setText(orderItem.getDescription());
        productName.setTag(position);

        productSize.setText(orderItem.getProductSize());



        //Setting up autocorrect adapter for product codes
        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (activity, android.R.layout.select_dialog_item, prodCodeList);
        //Getting the instance of AutoCompleteTextView

        productCode.setThreshold(1);//will start working from first character
        productCode.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView
        productCode.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View arg1, int pos,
                                    long id) {
                Toast.makeText(OrderApplication.getCustomAppContext(), (CharSequence)parent.getItemAtPosition(pos), Toast.LENGTH_LONG).show();


                int itemPosition = (Integer) arg1.getTag();

                //loadOrderItem(newOrderItem, (String) parent.getItemAtPosition(pos), true);
            }
        });

        //Setting up autocorrect adapter for product names
        adapter = new ArrayAdapter<String>
                (activity, android.R.layout.select_dialog_item, prodNameList);
        //Getting the instance of AutoCompleteTextView

        productName.setThreshold(2);//will start working from first character
        productName.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView

        return convertView;
    }

您应该使用-

adapter.getItem(pos)

在您的onItemClick中

我找到了一种变通办法来获取ListView中的AutoCompleteTextView引用。

holder.productCodeView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus) {
                currentFocusView = v;
            }

        }
    });

    holder.productCodeView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int pos, long id) {


            if (currentFocusView != null) {
                int iPosition = (Integer) currentFocusView.getTag();

            }


        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM