我有一个ListView的项目。当我点击某个项目时,我想显示一条简单的Toast消息,通知用户点击的项目。但由于某种原因,下面的代码对我不起作用:
当前项目的代码: - 不工作。
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Toast.makeText(getApplicationContext(), l.getItemAtPosition(position).toString() + " added to order", Toast.LENGTH_SHORT).show();
}
它过去曾奏效,这很奇怪。列表中的每个项目都包含一个ImageView,两个TextView,一个Button和一个NumberPicker小部件。它们都正常运行,但由于某种原因,不执行onListItemClick()代码。
为什么有任何想法?非常感谢!
编辑:我刚检查了一个较旧的项目,我使用了类似的代码,对其进行了测试,并且工作正常,我无法弄清楚为什么我遇到这个问题,是否与视图的复杂性有关? / p>以下是上一个项目的代码: - 工作正常。
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Toast.makeText(getApplicationContext(), l.getItemAtPosition(position).toString() + " added to order", Toast.LENGTH_SHORT).show();
// add clicked item to orderData....
MenuItem m = (MenuItem) l.getItemAtPosition(position);
// create new item
orderData.add(m);
subTotal += m.getPrice();
calc();
}
编辑:Adapter类的getView()方法
public View getView(final int position, View convertView, ViewGroup parent){
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.menuitem_row, null);
}
//assign values to view
final MenuItem item = this.menuItems.get(position);
TextView nameView = (TextView) v.findViewById(R.id.item_name);
final TextView priceView = (TextView) v.findViewById(R.id.item_price);
nameView.setText(item.getName() + " ");
priceView.setText("€"+ String.valueOf(item.getPrice()));
//number picker
np = (NumberPicker)v.findViewById(R.id.numpick);
np.setMaxValue(99);
np.setMinValue(0);
np.setValue(0);
//calculation occurs when values are changed...
np.setOnValueChangedListener( new OnValueChangeListener() {
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
Toast.makeText(picker.getContext(), "dish: " + item.getName() + " amount: " + picker.getValue(), Toast.LENGTH_SHORT).show();
Toast.makeText(picker.getContext(), "new Value: " + newVal + " old Value: " + oldVal, Toast.LENGTH_SHORT).show();
// amount += item.getPrice() * picker.getValue();
if(newVal > oldVal){
total = (item.getPrice() * newVal) - item.getPrice() * oldVal;
amount += total;
}
if(newVal < oldVal){
total = (item.getPrice() * oldVal) - item.getPrice() * newVal;
amount -= total;
}
price.setText("€" + String.valueOf(amount));
}
});
return v;
}
Menu_item_row.xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="20dp"
android:paddingTop="20dp"
android:orientation="horizontal" >
<NumberPicker
android:id="@+id/numpick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
<ImageView
android:id="@+id/dishpic"
android:layout_width="140dp"
android:layout_height="150dp"
android:layout_alignBottom="@+id/numpick"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/reviewBtn"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/item_price"
android:text="ITEM NAME"
android:textSize="30sp" />
<TextView
android:id="@+id/item_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/reviewBtn"
android:layout_below="@+id/item_name"
android:layout_marginTop="17dp"
android:layout_toRightOf="@+id/dishpic"
android:text="ITEM PRICE"
android:textSize="40sp" />
<Button
android:id="@+id/reviewBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/dishpic"
android:layout_toLeftOf="@+id/numpick"
android:layout_toRightOf="@+id/dishpic"
android:text="@string/reviewBtn" />
</RelativeLayout>
答案 0 :(得分:1)
尝试Button
和NumberPicker
致电setFocus(false)
getView()
答案 1 :(得分:0)
试试这个。
只需从listRow中删除Button和NumberPicker,看看它是否正常工作。如果它正在工作,那么该行为应该是因为View。
在Button和NumberPicker存在的情况下,你无法点击ListviewItem,这就是你没有得到任何东西的原因。
所以,请尝试一下,让我知道。
随意发表评论。