OnItemClickListener没有给出被点击项目的索引

时间:2014-09-11 15:15:49

标签: java android autocompletetextview onitemclicklistener

我为AutoCompleteTextView设置了setOnItemClickListener,在onItemClick中,我根据所选的值实现了需要发生的事情。程序通过查看所选项的索引值(在本例中为“int arg2”)来完成此操作。

这是代码

 mCommCode = (AutoCompleteTextView) findViewById(R.id.CommCode);
 ArrayAdapter<String> mArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, CommodityCode);

   mCommCode.setAdapter(mArrayAdapter);

   mCommCode.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {

                double finalCommodityValue = 0;
                double argument = ((double)arg2);

                if(argument < 26){

                finalCommodityValue = argument + 1.00;

                } 

唯一的麻烦是 - int arg2的值始终为0,如调试时所示。似乎点击的内容与传递给onItemClick的内容之间存在脱节。

有关如何弄明白的想法?

2 个答案:

答案 0 :(得分:0)

您的代码可能存在错误:

您正在重新定义finalCommodityValue

finalCommodityValue = 0;
if(argument < 26){

    double finalCommodityValue = argument + 1.00;

} 

这是一个编译错误,因为函数中不能有多个同名变量。

现在,如果变量finalCommodityValue是在包含您在此处显示的代码的函数之外定义的,那么您就是shadowing它。这意味着finalCommodityValue语句中的if (argument < 26)与您在整个函数之外定义的finalCommodityValue不同。从某种意义上说,它隐藏了在函数之外定义的值。

此外,在if语句中创建变量使其仅存在于if语句的范围内({}之间)。您没有在代码中使用它。

我认为您没有编译错误,因为您可以调试代码的运行方式。这意味着finalCommodityValue被定义为类字段。因此,您应该删除double

finalCommodityValue = 0;
if(argument < 26){

    finalCommodityValue = argument + 1.00;

} 

现在,您的函数finalCommodityValueif语句中的finalCommodityValue对应于您班级中全局定义的arg2

至于为什么mCommCode = (AutoCompleteTextView) findViewById(R.id.CommCode); 始终为0,我相信你的问题是:

OnItemClickListener

您在AutoCompleteTextView中使用了AutoCompleteTextViewListView是TextView,因此它只有一个项目。这就是为什么你总是得到位置0.你需要使用<AutoCompleteTextView android:id="@+id/tvAutocomplete" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="15" android:hint="@string/search_hint" > <requestFocus /> </AutoCompleteTextView> <ListView android:id="@+id/lvDataList" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="85" > </ListView> 代替。

在你的XML文件中你应该有这样的东西:

ListView searchList;

此外,创建一个类变量:

onCreate()

searchList = (ListView) findViewById(R.id.lvDataList);

OnItemClickListener

然后在包含您在此处显示的代码的函数中,将ListView放在AutoCompleteTextView而不是searchList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { Log.d("POSITION", position); // .. Rest of your code } }); 上:

{{1}}

答案 1 :(得分:0)

我认为你的arg2为0的问题是没有其他项目可供选择,因为你正在使用的视图对象(mCommCode)是一个textview,它不能保存可供选择的单个项目的列表。此角色使用listView对象完成。 如果您决定使用列表视图将数据源附加到:

,我认为这可以解决您的后顾之忧
mCommCode.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long id) {
                double finalCommodityValue = 0;
            double argument = ((double) position );

            if(argument < 26){

            finalCommodityValue = argument + 1.00;
            }
        });

你必须使用listView对象才能做到这一点。