点击查找行中ListView和获取数据 [英] Find clicked row in listview and get data
本文介绍了点击查找行中ListView和获取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用自定义适配器,以显示我的ArrayList的项目。每一行项目有2 textViews和图像按钮。根据一个属性的状态,在图像按钮图像是变化的。虽然这看起来很容易,我无法找到一种方式来获得来自行项目(订单ID在我的情况)的一些信息,点击图像按钮时。这是我的自定义适配器类
公共类OrderedAdapter扩展ArrayAdapter< RMOrder> {
私人上下文的背景下;
私人RMOrder rowItem;
私人的ListView LV;
私人诠释clickedID;
私人的ArrayList< RMOrder>项目;
私人诠释订单ID;
私人ViewHolder持有人;
公共OrderedAdapter(上下文的背景下,INT textViewResourceId,名单,其中,RMOrder>对象){
超(背景下,textViewResourceId,对象);
this.context =背景;
}
/ *私有视图holder类* /
私有类ViewHolder {
的ImageButton deleteButton;
TextView的txtMenuName;
TextView的txtMenuDesc;
TextView的txtMenuPrice;
INT订单ID;
}
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
支架=无效;
rowItem =的getItem(位置);
LayoutInflater mInflater =(LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
如果(convertView == NULL){
convertView = mInflater.inflate(R.layout.basket_list_row,NULL);
持有人=新ViewHolder();
holder.txtMenuName =(TextView中)convertView.findViewById(R.id.menuNameText);
holder.txtMenuDesc =(TextView中)convertView.findViewById(R.id.menuDetailText);
holder.deleteButton =(的ImageButton)convertView.findViewById(R.id.menuDelete);
holder.txtMenuPrice =(TextView中)convertView.findViewById(R.id.menuPrice);
holder.orderID = 0;
LV =(ListView控件)convertView.findViewById(R.id.orderedList);
convertView.setTag(保持器);
} 其他
支架=(ViewHolder)convertView.getTag();
字符串detailsString =;
双价= rowItem.getPrice();
为(RMOption I:rowItem.getOption()){
detailsString + = - + i.getName();
价格+ = i.getExtraPrice();
}
holder.orderID = rowItem.getId();
holder.txtMenuName.setText(rowItem.getMenuName());
holder.txtMenuDesc.setText(detailsString);
holder.txtMenuPrice.setText(Double.toString(价格)+TL);
holder.deleteButton.setFocusable(假);
项=新的ArrayList&其中; RMOrder>(GlobalList.orderedItemsList.values());
clickedID = items.get(位置).getId();
订单ID = holder.orderID;
//改变图像按钮的图像
如果(rowItem.getStatus()。等于(悬而未决)){
holder.deleteButton.setImageResource(R.drawable.rsz_pending);
holder.deleteButton.setOnClickListener(新OnClickListener(){
// TODO Buradatıklananıbulmaktasıkıntı变种
公共无效的onClick(视图v){
//获取订单ID
}
});
其他
holder.deleteButton.setImageResource(R.drawable.rsz_approved);
}
返回convertView;
}
解决方案
设置位置deleteButton标签
holder.deleteButton =(的ImageButton)convertView.findViewById(R.id.menuDelete);
holder.deleteButton.setTag(位置);
然后的onClick
holder.deleteButton.setOnClickListener(新OnClickListener(){
// TODO Buradatıklananıbulmaktasıkıntı变种
公共无效的onClick(视图v){
INT POS = Integer.parseInteger(v.getTag());
RMOrder rItem =的getItem(POS);
INT的orderId = rowItem.getId();
}
});
I am using custom adapter to show the items in my ArrayList. Each row item has 2 textViews and an image button. Depending on the status of an attribute, image on the image button is changing. Although it seems quite easy, I couldn't find a way to get some information from row item(orderID in my case), when image button is clicked. This is my custom adapter class
public class OrderedAdapter extends ArrayAdapter<RMOrder> {
private Context context;
private RMOrder rowItem;
private ListView lv;
private int clickedID;
private ArrayList<RMOrder>items;
private int orderID;
private ViewHolder holder;
public OrderedAdapter(Context context, int textViewResourceId, List<RMOrder> objects) {
super(context, textViewResourceId, objects);
this.context = context;
}
/*private view holder class*/
private class ViewHolder {
ImageButton deleteButton;
TextView txtMenuName;
TextView txtMenuDesc;
TextView txtMenuPrice;
int orderID;
}
public View getView(final int position, View convertView, ViewGroup parent) {
holder = null;
rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.basket_list_row, null);
holder = new ViewHolder();
holder.txtMenuName = (TextView) convertView.findViewById(R.id.menuNameText);
holder.txtMenuDesc = (TextView) convertView.findViewById(R.id.menuDetailText);
holder.deleteButton = (ImageButton) convertView.findViewById(R.id.menuDelete);
holder.txtMenuPrice = (TextView) convertView.findViewById(R.id.menuPrice);
holder.orderID = 0;
lv = (ListView) convertView.findViewById(R.id.orderedList);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
String detailsString = "";
double price = rowItem.getPrice();
for (RMOption i : rowItem.getOption()) {
detailsString += "-" + i.getName();
price += i.getExtraPrice();
}
holder.orderID = rowItem.getId();
holder.txtMenuName.setText(rowItem.getMenuName());
holder.txtMenuDesc.setText(detailsString);
holder.txtMenuPrice.setText(Double.toString(price) + " TL");
holder.deleteButton.setFocusable(false);
items = new ArrayList<RMOrder>(GlobalList.orderedItemsList.values());
clickedID = items.get(position).getId();
orderID = holder.orderID;
//change image of image button
if(rowItem.getStatus().equals("pending")){
holder.deleteButton.setImageResource(R.drawable.rsz_pending);
holder.deleteButton.setOnClickListener(new OnClickListener() {
//TODO Burada tıklananı bulmakta sıkıntı var
public void onClick(View v) {
//GET ORDER ID
}
});
else
holder.deleteButton.setImageResource(R.drawable.rsz_approved);
}
return convertView;
}
解决方案
Set the position as deleteButton tag
holder.deleteButton = (ImageButton) convertView.findViewById(R.id.menuDelete);
holder.deleteButton.setTag(position);
And then onClick
holder.deleteButton.setOnClickListener(new OnClickListener() {
//TODO Burada tıklananı bulmakta sıkıntı var
public void onClick(View v) {
int pos = Integer.parseInteger(v.getTag());
RMOrder rItem = getItem(pos);
int orderId = rowItem.getId();
}
});
这篇关于点击查找行中ListView和获取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文