[英]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.