点击查找行中ListView和获取数据 [英] Find clicked row in listview and get data

查看:186
本文介绍了点击查找行中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();

    字符串detailsS​​tring =;
    双价= rowItem.getPrice();

    为(RMOption I:rowItem.getOption()){
        detailsS​​tring + = - + i.getName();
        价格+ = i.getExtraPrice();
    }

    holder.orderID = rowItem.getId();
    holder.txtMenuName.setText(rowItem.getMenuName());
    holder.txtMenuDesc.setText(detailsS​​tring);
    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆