我为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的内容之间存在脱节。
有关如何弄明白的想法?
答案 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;
}
现在,您的函数finalCommodityValue
和if
语句中的finalCommodityValue
对应于您班级中全局定义的arg2
。
至于为什么mCommCode = (AutoCompleteTextView) findViewById(R.id.CommCode);
始终为0,我相信你的问题是:
OnItemClickListener
您在AutoCompleteTextView
中使用了AutoCompleteTextView
。 ListView
是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对象才能做到这一点。