2013-01-06 95 views
0

我有一個ListView的項目。當我點擊一個項目時,我想顯示一個簡單的Toast消息,通知用戶點擊的項目。但由於某些原因,下面的代碼不適用於我:ListView onListItemClick無法正常工作

當前項目的代碼: - 不工作。

@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()代碼不會被執行。

任何想法爲什麼?非常感謝!

編輯:我只是檢查了一個較舊的項目,我用類似的代碼,測試它,它工作正常,我弄不明白爲什麼我有這個問題,這是與視圖的複雜性?

以下是以前項目的代碼: - 工作正常。

@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(); 
} 

編輯:適配器類的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> 
+1

有時候還需要用戶輸入的東西(比如你的選擇器)干擾'onListItemClick()'。 –

+0

我認爲這可能是問題,我能做些什麼來解決這個問題嗎?或者,也許我將不得不在添加選項時添加Toast ... – Javacadabra

+1

您是否調用'setContentView()'或使用默認的ListView? – Sam

回答

1

試用ButtonNumberPicker調用setFocus(false)getView()

0

嘗試有了這個。

只需從listRow中刪除Button和NumberPicker,並查看其是否工作。如果它正在工作,那麼該行爲應該是因爲View。

在Button和NumberPicker的存在下,您無法點擊ListviewItem,這就是爲什麼你沒有得到任何烤麪包。

所以,請嘗試一下,讓我知道。

請隨時留下任何意見。

+0

多數民衆贊成在一個好點,我現在不在我的電腦,但會盡快給我一個鏡頭! – Javacadabra