ListView onItemSelected 监听器
ListView onItemSelected Listener
我只想在列表视图的选定行中显示图像。这是代码:
private class ListAdapter extends BaseAdapter {
LayoutInflater inflater;
ViewHolder viewHolder;
public ListAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
public int getCount() {
return attendeeList.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.attendee_listview_row,
null);
viewHolder = new ViewHolder();
viewHolder.txt_dName = (TextView) convertView
.findViewById(R.id.txtDisplayName);
viewHolder.txt_dAddr = (TextView) convertView
.findViewById(R.id.txtDisplayAddr);
viewHolder.txt_dtelNo = (TextView) convertView
.findViewById(R.id.txtDisplayTelNo);
viewHolder.btn_scan = (ImageView) convertView.findViewById(R.id.btnScan);
viewHolder.registered_tag = (ImageView) convertView.findViewById(R.id.ivRegisteredTag);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.txt_dName.setText(attendeeList.get(position)
.getAccountName().trim());
viewHolder.txt_dAddr.setText(attendeeList.get(position)
.getAttendeeAddr().trim());
viewHolder.txt_dtelNo.setText("Tel no: "
+ attendeeList.get(position).getTelNo().trim());
viewHolder.btn_scan.setOnClickListener(new OnClickListener(){
public void onClick(View v){
viewHolder.registered_tag.setVisibility(View.VISIBLE);
Intent intent = new Intent(
"com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
});
return convertView;
}
}
使用这些代码,我试图在 btn_scan onClick 时显示 registered_tag。但是,图像并没有真正显示在所选行中。它显示在另一行。
有什么想法吗?提前致谢。
您可能在单击任何行时看到最后一行图像发生变化,因为 viewHolder
将在调用 getView
时包含最后一行视图。使用 viewHolder.btn_scan
视图的 setTag
和 getTag
方法在 onClick 方法中保存和获取选定的行视图:
viewHolder.btn_scan.setTag(viewHolder);
viewHolder.btn_scan.setOnClickListener(new OnClickListener(){
public void onClick(View v){
ViewHolder selectedViewHolder=(ViewHolder)v.getTag();
selectedViewHolder.registered_tag.setVisibility(View.VISIBLE);
...
}
});
我只想在列表视图的选定行中显示图像。这是代码:
private class ListAdapter extends BaseAdapter {
LayoutInflater inflater;
ViewHolder viewHolder;
public ListAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
public int getCount() {
return attendeeList.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.attendee_listview_row,
null);
viewHolder = new ViewHolder();
viewHolder.txt_dName = (TextView) convertView
.findViewById(R.id.txtDisplayName);
viewHolder.txt_dAddr = (TextView) convertView
.findViewById(R.id.txtDisplayAddr);
viewHolder.txt_dtelNo = (TextView) convertView
.findViewById(R.id.txtDisplayTelNo);
viewHolder.btn_scan = (ImageView) convertView.findViewById(R.id.btnScan);
viewHolder.registered_tag = (ImageView) convertView.findViewById(R.id.ivRegisteredTag);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.txt_dName.setText(attendeeList.get(position)
.getAccountName().trim());
viewHolder.txt_dAddr.setText(attendeeList.get(position)
.getAttendeeAddr().trim());
viewHolder.txt_dtelNo.setText("Tel no: "
+ attendeeList.get(position).getTelNo().trim());
viewHolder.btn_scan.setOnClickListener(new OnClickListener(){
public void onClick(View v){
viewHolder.registered_tag.setVisibility(View.VISIBLE);
Intent intent = new Intent(
"com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
});
return convertView;
}
}
使用这些代码,我试图在 btn_scan onClick 时显示 registered_tag。但是,图像并没有真正显示在所选行中。它显示在另一行。
有什么想法吗?提前致谢。
您可能在单击任何行时看到最后一行图像发生变化,因为 viewHolder
将在调用 getView
时包含最后一行视图。使用 viewHolder.btn_scan
视图的 setTag
和 getTag
方法在 onClick 方法中保存和获取选定的行视图:
viewHolder.btn_scan.setTag(viewHolder);
viewHolder.btn_scan.setOnClickListener(new OnClickListener(){
public void onClick(View v){
ViewHolder selectedViewHolder=(ViewHolder)v.getTag();
selectedViewHolder.registered_tag.setVisibility(View.VISIBLE);
...
}
});