0

我有一个这样的自定义适配器:

public class DeviceAdapter extends BaseAdapter {

private static ArrayList<Device> availableDevices;
Context c;
private LayoutInflater mInflater;

/**
 * Constructor for this class
 * @param context Which context triggered this class
 * @param devices Object of each devices
 */
public DeviceAdapter(Context context, ArrayList<Device> devices) {
    this.availableDevices = devices; 
    this.c = context; 
    mInflater = LayoutInflater.from(c);
}


public int getCount() {
    return availableDevices.size();
}


public Object getItem(int position) {
    return availableDevices.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.device_list, null);
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.address = (TextView) convertView.findViewById(R.id.address);

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

    holder.name.setText("Device name: "+availableDevices.get(position).getName());
    holder.address.setText("Mac-address: "+ availableDevices.get(position).getAddress());


    return convertView;
}


static class ViewHolder {
    TextView name;
    TextView address;

}

}

我的问题是:如何访问name用户按下的对象变量?

4

2 回答 2

2

使用 onItemClickListener 和列表http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html

ist.setOnItemClickListener(new AdapterView.onItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {
      Object listItem = list.getItemAtPosition(position);

     or
     TextView tv =    (TextView) view.findViewById(R.id.name);
         name = tv.getText(); 

   } 
});
于 2012-06-28T11:36:51.817 回答
0

您可以通过添加 holder.name.setOnClickListener 来获取仅名称 TextView 单击的 OnClick 事件......请参见以下代码

public class DeviceAdapter extends BaseAdapter {

private static ArrayList<Device> availableDevices;
Context c;
private LayoutInflater mInflater;

/**
 * Constructor for this class
 * @param context Which context triggered this class
 * @param devices Object of each devices
 */
public DeviceAdapter(Context context, ArrayList<Device> devices) {
    this.availableDevices = devices; 
    this.c = context; 
    mInflater = LayoutInflater.from(c);
}


public int getCount() {
    return availableDevices.size();
}


public Object getItem(int position) {
    return availableDevices.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.device_list, null);
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.address = (TextView) convertView.findViewById(R.id.address);

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

    holder.name.setText("Device name: "+availableDevices.get(position).getName());
    holder.address.setText("Mac-address: "+ availableDevices.get(position).getAddress());

    //   PUT FOLLOWIN   ------------------
    holder.name.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    put your dezired code here which runs OnClick of TextView NAME
                }
            });
    //         -----------------

    return convertView;
}


static class ViewHolder {
    TextView name;
    TextView address;

}

}
于 2012-06-28T11:46:20.897 回答