0

アイテムのListViewがあります。アイテムをクリックすると、クリックされたアイテムをユーザーに通知する簡単なトーストメッセージを表示したいと思います。ただし、何らかの理由で、以下のコードが機能していません。

現在のプロジェクトのコード:-機能していません。

@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、2つのTextView、Button、および1つの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();
}

編集: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>
4

2 に答える 2

1

ButtonNumberPicker電話setFocus(false)してみてくださいgetView()

于 2013-01-06T23:13:03.190 に答える
0

これで試してみてください。

ListRow から Button と NumberPicker を削除して、機能するかどうかを確認してください。それが機能している場合、その動作はビューが原因である必要があります。

Button と NumberPicker が存在する場合、ListviewItem をクリックできないため、トーストが表示されません。

それで、それを試して、私に知らせてください。

コメントはお気軽にどうぞ。

于 2013-01-07T04:28:02.583 に答える