0

我有一个具有以下布局的自定义列表视图: 布局的 GUI 视图

android:onClick我已经使用属性在 xml 中为“qadd”按钮和“qsub”按钮定义了一个 onClick 方法。

在我的 Activity 类中,如何为当前位置选择“数量”textView?

我试过了,但它只更新第一个位置的“数量”textView。

public void addClicked(View v) {
        final int position = list.getPositionForView((View) v.getParent().getParent());
        long rec_id = adapter.getItemId(position);

        JSONObject o = (JSONObject) fullList.get(rec_id + "");

        TextView q = (TextView)findViewById(R.id.quantity);

        int quantity = Integer.parseInt((String) q.getText());

        quantity++;

        q.setText(quantity + "");

        try {

            String price = o.getString("price");
            subtotal = subtotal + (Integer.parseInt(price) * quantity);
            total_text = (TextView) findViewById(R.id.subtotal);
            total_text.setText(subtotal + "");

            // Log.d("position", price);

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

上面的代码在这一行出错了:

TextView q = (TextView)findViewById(R.id.quantity);

它总是在第一个位置选择 textView。请询问是否需要任何其他代码。

整个custom_list_layout.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_selector"
    android:orientation="horizontal"
    android:padding="5dip" >



    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/checkBox1" >

        <LinearLayout
            android:id="@+id/thumbnail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dip"
            android:background="@drawable/image_bg"
            android:padding="3dip" >

            <ImageView
                android:id="@+id/item_img"
                android:layout_width="50dip"
                android:layout_height="50dip"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="2.5"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/item_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Item name"
                android:textColor="#040404"
                android:textSize="15dip"
                android:textStyle="bold"
                android:typeface="sans" />

            <TextView
                android:id="@+id/item_desc"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Item description"
                android:textColor="#343434"
                android:textSize="10dip" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="0.75"
            android:gravity="right"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:orientation="horizontal" >

                <TextView
                    android:id="@+id/rupee"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="right"
                    android:text="Rs. "
                    android:textColor="#EC1669"
                    android:textSize="10dip"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/item_price"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="5dip"
                    android:gravity="right"
                    android:text="0 "
                    android:textColor="#EC1669"
                    android:textSize="10dip"
                    android:textStyle="bold" />

            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="bottom|right" >

                <Button
                    android:id="@+id/qadd"
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:minHeight="24dp"
                    android:minWidth="24dp"
                    android:onClick="addClicked"
                    android:text="+" />

                <TextView
                    android:id="@+id/quantity"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="0"
                    android:textAppearance="?android:attr/textAppearanceSmall" />

                <Button
                    android:id="@+id/qsub"
                    style="?android:attr/buttonStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:minHeight="24dp"
                    android:minWidth="24dp"
                    android:onClick="subClicked"
                    android:text="-" />

            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

链接到我的整个项目。

4

1 回答 1

1

您要处理的文本视图应该是您在 XML 中为列表适配器指定的列表项行中的那个。

如果您使用的是自定义适配器,则在 getView 中,您应该按如下方式连接 textview:

// create a new TextView for each item referenced by the Adapter
    public View getView(final int position, View convertView, final ViewGroup parent) {
        View listView = convertView;

        if (listView == null) { // if it's not recycled, initialize some attributes
            // get layout from xml
            LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            listView = inflater.inflate(R.layout.browse_product_item, null);
        }


        final ListProductHolder holder;

        if (listView.getTag() != null) {
            holder = (listProductHolder) listView.getTag();
        } else {
            holder = new listProductHolder();
            listView.setTag(holder);

            holder.text= (TextView) listView.findViewById(R.id.quantity);

如果您在 listView 中的每个项目中都有适当的 TextView,那么为该视图连接 OnClickListener 并响应这些单击事件是一个简单的过程。

于 2013-08-20T15:44:12.333 回答