简体   繁体   English

ListView中的Android按钮用于更改同一行中的文本

[英]Android Button in ListView Item to change text in same row

I have a listview which set up by using a custom listAdapter. 我有一个listview,它使用自定义listAdapter进行设置。 There is button in each listView item to change the textView in same row. 每个listView项中都有一个按钮来更改同一行中的textView。 How can i make it ? 我该怎么做? Here is part of the code : 以下是代码的一部分:

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

You can use below code to fix your issue. 您可以使用以下代码来解决您的问题。

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

Try this 尝试这个

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

Hope this helps. 希望这可以帮助。

set the ids of Button and TextView that you can differentiate when the button is clicked. 设置Button和TextView的ID,您可以在单击按钮时区分它们。 What I mean is.. suppose you have 10 items that are to be displayed in a listview so getView() method will receive position ranging from 0 to 9. So what you can do here is set id of Buttons like 10+position and that of TextViews like 1000+position or any random number. 我的意思是..假设你有10个项目要在listview中显示,所以getView()方法将获得0到9之间的position 。所以你可以做的是设置按钮的id,如10+position和that TextViews,如1000+position或任意随机数。 So when a button is clicked, you can get the id of it, subtract 10 from it.. Now add 1000 to it to get the TextView and change it's text. 因此,当单击一个按钮时,您可以获取它的id,从中减去10.现在添加1000以获取TextView并更改它的文本。

Here is my own example that illustrates how to use the onClickListener correctly inside an Adapter . 这是我自己的示例,演示了如何在Adapter内正确使用onClickListener The functionality is almost the same as you. 功能与您几乎相同。 I have a list of products and inside my list-item, the user can increase or decrease the amount of bought items. 我有一个产品列表,在我的列表项中,用户可以增加或减少购买的商品数量。

My item object that holder the item properties. 我的项目对象持有项目属性。 It has an ID, a name and an order that refers to the number of times this item has been bought: 它有一个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;
    }

}

Here is a snippet of my Adapter that holds a list of MenuItems. 这是我的Adapter的片段,其中包含MenuItems列表。 The UI holds an up and down image button together with the name. 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();
    }

Have fun! 玩得开心!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM