3

カスタムlistAdapterを使用して設定したリストビューがあります。各 listView アイテムには、同じ行の textView を変更するためのボタンがあります。どうすれば作れますか?コードの一部を次に示します。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    final int _position = position;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.activity_today_sales_list_view, null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView) convertView.findViewById(R.id.itemNameTB);
        holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.priceTB);
        holder.txt_plusBtn = (Button) convertView.findViewById(R.id.addBtn);
        holder.txt_minusBtn = (Button) convertView.findViewById(R.id.minusBtn);


        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txt_plusBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

             Log.d("Plus Btn", "Clicked");

        }


    });

    holder.txt_minusBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Log.d("Minus Btn", "Clicked");

        }
    });

    holder.txt_itemName.setText(itemDetailsrrayList.get(position).getItemName());
    holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getItemCost());

    return convertView;
}
4

4 に答える 4

10

以下のコードを使用して問題を解決できます。

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.activity_today_sales_list_view, null);
        holder = new ViewHolder();
        holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.priceTB);
        holder.txt_plusBtn = (Button) convertView.findViewById(R.id.addBtn);
        holder.txt_plusBtn.setOnClickListener(new View.OnClickListener() {

             @Override
            public void onClick(View v) {
                ViewHolder holder1 = (ViewHolder)v.getTag();
                //Access the Textview from holder1 like below
                holder1.txt_itemPrice.setText("Plus");

            }
        });

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.txt_plusBtn.setTag(holder);

    holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getItemCost());

    return convertView;
}
于 2013-05-08T10:09:10.130 に答える
0

ボタンがクリックされたときに区別できる Button と TextView の ID を設定します。つまり、リストビューに表示されるアイテムが10個あると仮定すると、getView()メソッドは0から9の範囲を受け取りpositionます。ここでできることは、ボタンのようなIDと10+positionTextViewのようなID、1000+positionまたは任意の乱数を設定することです. したがって、ボタンがクリックされると、その ID を取得し、そこから 10 を引きます。1000 を足して TextView を取得し、テキストを変更します。

于 2013-05-08T09:43:31.677 に答える
0

onClickListenerこれは、内で を正しく使用する方法を示す私自身の例ですAdapter。機能はあなたとほとんど同じです。製品のリストがあり、リスト項目内で、ユーザーは購入した項目の量を増減できます。

アイテムのプロパティを保持するアイテム オブジェクト。ID、名前、およびこのアイテムが購入された回数を参照する順序があります。

public class MenuItem {
    private int id;
    private String name;
    private int order = 0;

    public MenuItem(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getOrder() {
        return order;
    }

    public void setOrder(int order) {
        this.order = order;
    }

}

Adapterこれは、MenuItems のリストを保持するmy のスニペットです。UI には、名前と一緒に上下の画像ボタンがあります。

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        if (convertView == null) {
            LayoutInflater lInflater = ((Activity) mContext).getLayoutInflater();
            convertView = lInflater.inflate(R.layout.menu_item, parent, false);

            holder = new ViewHolder();
            holder.name = (TextView) convertView.findViewById(R.id.menu_name);
            holder.details = (TextView) convertView.findViewById(R.id.menu_details);
            holder.counter = (TextView) convertView.findViewById(R.id.menu_counter);
            holder.up = (ImageView) convertView.findViewById(R.id.menu_up);
            holder.down = (ImageView) convertView.findViewById(R.id.menu_down);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.name.setText(getMenuList().get(position).getName());
        holder.details.setText(getMenuList().get(position).getDetails());
        holder.counter.setText(String.valueOf(getMenuList().get(position).getOrder()));

        holder.up.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                onListItemClick(position, UP);
            }
        });

        holder.down.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                onListItemClick(position, DOWN);
            }
        });
        return convertView;
    }

    protected void onListItemClick(int position, int direction) {
        int numberOfOrders = getMenuList().get(position).getOrder();
        if (direction == DOWN && numberOfOrders == 0) {
            // Don't go negative!
            return;
        }

        getMenuList().get(position).setOrder(numberOfOrders +  direction);
            // in your case: itemDetailsrrayList.get(position).setOrder(...);
        notifyDataSetChanged();
    }

楽しむ!

于 2013-05-08T10:01:46.283 に答える
0

これを試して

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    final int _position = position;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.activity_today_sales_list_view, null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView) convertView.findViewById(R.id.itemNameTB);
        holder.txt_itemPrice = (TextView) convertView.findViewById(R.id.priceTB);
        holder.txt_plusBtn = (Button) convertView.findViewById(R.id.addBtn);
        holder.txt_minusBtn = (Button) convertView.findViewById(R.id.minusBtn);


        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txt_plusBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

                 Log.d("Plus Btn", "Clicked");
                 holder.txt_itemName.setText("Your String");
                 holder.txt_itemPrice.setText("Your String");

        }


    });

    holder.txt_minusBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Log.d("Minus Btn", "Clicked");
            holder.txt_itemName.setText("Your String");
            holder.txt_itemPrice.setText("Your String");

        }
    });

    holder.txt_itemName.setText(itemDetailsrrayList.get(position).getItemName());
    holder.txt_itemPrice.setText(itemDetailsrrayList.get(position).getItemCost());

    return convertView;
}

お役に立てれば。

于 2013-05-08T09:40:50.913 に答える