ListView 点击一个item另外几个Item响应(估计好多人没遇到过) 点击事件写在外层OnItemClickListener中。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 啊,怎么写在外层?你意思是和ListView一层么???我不仅要监听里面的各个控件,还要监听总的Item 看来大家估计都没遇到过,谁可以给我一份正规的getView方法呀,有Item里面的各种控件的监听邮箱[email protected]。不胜感激。 我不仅要监听里面的各个控件,还要监听总的Item这句话什么意思?用listView.setOnItemClickListener也一样啊我感觉你的错误应该是被点击的position和convertView混乱了导致的。先写到OnItemClickListener里试试。 ListView中不是有很多Item么,每个Item中有很多控件,我还要对各个控件进行监听。明白??? public View getView(final int position, View view, ViewGroup parent) { // holder = new ViewHolder(); if (view == null) { view = inflater.inflate(R.layout.custom_list_item, null); } final Button praise = (Button) view.findViewById(R.id.praise); praise.setText(allMessage.get(position).getPraNum() + ""); praise.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isPraised(allMessage.get(position).getMsgId())) { ViewUtil.toastShort("你已经赞过了", context); return; } Button btn = (Button)v; btn.setText(allMessage.get(position).getPraNum() + 1 + ""); btn.setBackgroundResource(R.drawable.message_praise_yes); new DownLoadThread(handler, allMessage.get(position).getMsgId()) .start(); } }); } 我是这样写的,每个list item里面的控件的监听事件OnClickListener在getView里面注册,而list的点击事件OnItemClickListener写在继承listActivity的那个文件里 回复8楼,我这个Adapter还要扩展呢,不能那么写 扩展是个什么意思,Adapter只是个向列表添加数据的容器,getview是在添加数据的时候调用,点击时是不调用的 扩展是个什么意思,Adapter只是个向列表添加数据的容器,getview是在添加数据的时候调用,点击时是不调用的给个getView的例子吧。 监听类不要写在适配器类里面吧.可以参考一下这个例子http://download.csdn.net/detail/fzllz/5369093 问题解决了,这是布局的滚动混乱问题,我一开始就应该想到的,可以监听到东西,滚动的时候会在别的地方出现,解决办法,就是定义一个List或者map将每个Item的状态保存下来就行了。谢谢各位大哥。额。。 我也遇到这个问题,ListFragment中的监听item点击事件,结果点第一个item,第7,14,21都会响应,本人手机是三星note2,然后换了同事的魅族,结果是0,5,10,15一起响应。楼主怎么解决的,具体代码发一份给我吧,[email protected] 同遇到此问题,求源码[email protected] 我也遇到此问题了,头疼,求解啊 [email protected],万分感谢! 楼主怎么解决的 可发我份源码 [email protected] 楼主怎么解决的啊 发我份源码把 [email protected] 急求 谢谢 楼主,我现在遇到的问题跟你一样,能把你的那份代码发我参考下吗,谢谢![email protected] package com.mars.library.adapter;import java.util.ArrayList;import java.util.HashMap;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ProgressBar;import android.widget.RelativeLayout;import android.widget.TextView;import com.mars.library.entry.BookMyBorrow;import com.mars.library.main.R;import com.mars.library.util.BookDetailHandler;import com.mars.library.util.ConstantUtil;import com.mars.library.util.RequestThread;import com.mars.library.util.VarUtil;import com.mars.library.util.ViewUtil;/** * Book简单的适配器 * * @author Administrator * */@SuppressLint({ "HandlerLeak", "UseSparseArrays" })public class ListViewBookMyBorrowAdapter extends BaseAdapter { private Context context; private ArrayList<BookMyBorrow> allBook; private LayoutInflater inflater; //同学:保存按钮的状态,来判断是否有这个按钮。不保存状态的话,下拉以后就可能不显示了。 //同学:因为这个保存是全部保存,而ListView的机制,是保存当前显示的,所以那个不靠谱。但是那个省内存。所以需要保存状态再保存,不需要就不要保存 private HashMap<Integer, Boolean> isCanRenew = new HashMap<Integer, Boolean>(); public ListViewBookMyBorrowAdapter(Context context, ArrayList<BookMyBorrow> allBook) { this.context = context; this.allBook = allBook; this.inflater = LayoutInflater.from(context); } @Override public View getView(final int position, View view, ViewGroup parent) { // 如果不加这行代码,很容易溢出 if (view == null) { view = inflater.inflate(R.layout.book_my_borrow_item, null); } if (allBook.isEmpty()) { return view; } final ViewHolder holder = new ViewHolder(); holder.item = (RelativeLayout) view.findViewById(R.id.item); holder.number = (TextView) view.findViewById(R.id.number); holder.name = (TextView) view.findViewById(R.id.name); holder.date = (TextView) view.findViewById(R.id.date); holder.renew = (Button) view.findViewById(R.id.renew); holder.progress = (ProgressBar) view.findViewById(R.id.progressBar); holder.number.setText(allBook.get(position).getId()); holder.name.setText(allBook.get(position).getName()); holder.date.setText(allBook.get(position).getDate()); // 点击列表查看图书的详细信息 holder.item.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { lookUpBookDetail(position); } }); //同学:看这里 isCanRenew.put(position, allBook.get(position).isRenew());// 保存 //同学:看这里 if (isCanRenew.get(position) == false) {// 如果不可用 holder.renew.setVisibility(View.GONE); } else {// 如果可以续借 holder.renew.setVisibility(View.VISIBLE); holder.renew.setEnabled(true); } holder.renew.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String url = VarUtil.URL + "/renew"; HashMap<String, String> allParams = new HashMap<String, String>(); allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount()); allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword()); allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode()); allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position).getDepartmentId()); allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId()); VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder), allParams)); } });// if (allBook.get(position).isRenew() == false) {// holder.renew.setVisibility(View.GONE);// } else {// holder.renew.setVisibility(View.VISIBLE);// holder.renew.setEnabled(true);//// holder.renew.setOnClickListener(new OnClickListener() {// @Override// public void onClick(View v) {// String url = VarUtil.URL + "/renew";// HashMap<String, String> allParams = new HashMap<String, String>();// allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount());// allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword());// allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode());// allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position)// .getDepartmentId());// allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId());// VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder),// allParams));// }// });// } return view; } private void lookUpBookDetail(int position) { // 根据参数,请求数据 String url = ConstantUtil.URL + "/lib/detail.aspx"; HashMap<String, String> allParams = new HashMap<String, String>(); allParams.put(ConstantUtil.DETAIL, "true"); allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode()); BookDetailHandler handler = new BookDetailHandler((Activity) context); VarUtil.threadPool.submit(new RequestThread(url, handler, allParams)); } private class RenewHandler extends Handler { private ViewHolder holder; public RenewHandler(ViewHolder holder) { this.holder = holder; } @Override public void handleMessage(Message msg) { switch (msg.what) { // 任务开始 case ConstantUtil.START: holder.renew.setVisibility(View.INVISIBLE); holder.progress.setVisibility(View.VISIBLE); break; // 任务结束 case ConstantUtil.END: if (VarUtil.result.equals(ConstantUtil.SUCCESS)) { holder.renew.setVisibility(View.GONE); holder.progress.setVisibility(View.GONE); } else if (VarUtil.result.equals(ConstantUtil.FAIL)) { holder.renew.setVisibility(View.VISIBLE); holder.progress.setVisibility(View.INVISIBLE); ViewUtil.toastShort("续借失败!", (Activity) context); } break; // 任务出错 case ConstantUtil.INTERNET_ERROR: ViewUtil.toastShort("客户端网络异常!请您稍后重试!", (Activity) context); break; default: break; } } } class ViewHolder { RelativeLayout item; TextView number; TextView name; TextView date; Button renew; ProgressBar progress; } @Override public int getCount() { return allBook.size(); } @Override public Object getItem(int arg0) { return allBook.get(arg0); } @Override public long getItemId(int arg0) { return arg0; }}不懂的再发我邮箱[email protected] package com.mars.library.adapter;import java.util.ArrayList;import java.util.HashMap;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ProgressBar;import android.widget.RelativeLayout;import android.widget.TextView;import com.mars.library.entry.BookMyBorrow;import com.mars.library.main.R;import com.mars.library.util.BookDetailHandler;import com.mars.library.util.ConstantUtil;import com.mars.library.util.RequestThread;import com.mars.library.util.VarUtil;import com.mars.library.util.ViewUtil;/** * Book简单的适配器 * * @author Administrator * */@SuppressLint({ "HandlerLeak", "UseSparseArrays" })public class ListViewBookMyBorrowAdapter extends BaseAdapter { private Context context; private ArrayList<BookMyBorrow> allBook; private LayoutInflater inflater; //同学:保存按钮的状态,来判断是否有这个按钮。不保存状态的话,下拉以后就可能不显示了。 //同学:因为这个保存是全部保存,而ListView的机制,是保存当前显示的,所以那个不靠谱。但是那个省内存。所以需要保存状态再保存,不需要就不要保存 private HashMap<Integer, Boolean> isCanRenew = new HashMap<Integer, Boolean>(); public ListViewBookMyBorrowAdapter(Context context, ArrayList<BookMyBorrow> allBook) { this.context = context; this.allBook = allBook; this.inflater = LayoutInflater.from(context); } @Override public View getView(final int position, View view, ViewGroup parent) { // 如果不加这行代码,很容易溢出 if (view == null) { view = inflater.inflate(R.layout.book_my_borrow_item, null); } if (allBook.isEmpty()) { return view; } final ViewHolder holder = new ViewHolder(); holder.item = (RelativeLayout) view.findViewById(R.id.item); holder.number = (TextView) view.findViewById(R.id.number); holder.name = (TextView) view.findViewById(R.id.name); holder.date = (TextView) view.findViewById(R.id.date); holder.renew = (Button) view.findViewById(R.id.renew); holder.progress = (ProgressBar) view.findViewById(R.id.progressBar); holder.number.setText(allBook.get(position).getId()); holder.name.setText(allBook.get(position).getName()); holder.date.setText(allBook.get(position).getDate()); // 点击列表查看图书的详细信息 holder.item.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { lookUpBookDetail(position); } }); //同学:看这里 isCanRenew.put(position, allBook.get(position).isRenew());// 保存 //同学:看这里 if (isCanRenew.get(position) == false) {// 如果不可用 holder.renew.setVisibility(View.GONE); } else {// 如果可以续借 holder.renew.setVisibility(View.VISIBLE); holder.renew.setEnabled(true); } holder.renew.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String url = VarUtil.URL + "/renew"; HashMap<String, String> allParams = new HashMap<String, String>(); allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount()); allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword()); allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode()); allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position).getDepartmentId()); allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId()); VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder), allParams)); } });// if (allBook.get(position).isRenew() == false) {// holder.renew.setVisibility(View.GONE);// } else {// holder.renew.setVisibility(View.VISIBLE);// holder.renew.setEnabled(true);//// holder.renew.setOnClickListener(new OnClickListener() {// @Override// public void onClick(View v) {// String url = VarUtil.URL + "/renew";// HashMap<String, String> allParams = new HashMap<String, String>();// allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount());// allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword());// allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode());// allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position)// .getDepartmentId());// allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId());// VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder),// allParams));// }// });// } return view; } private void lookUpBookDetail(int position) { // 根据参数,请求数据 String url = ConstantUtil.URL + "/lib/detail.aspx"; HashMap<String, String> allParams = new HashMap<String, String>(); allParams.put(ConstantUtil.DETAIL, "true"); allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode()); BookDetailHandler handler = new BookDetailHandler((Activity) context); VarUtil.threadPool.submit(new RequestThread(url, handler, allParams)); } private class RenewHandler extends Handler { private ViewHolder holder; public RenewHandler(ViewHolder holder) { this.holder = holder; } @Override public void handleMessage(Message msg) { switch (msg.what) { // 任务开始 case ConstantUtil.START: holder.renew.setVisibility(View.INVISIBLE); holder.progress.setVisibility(View.VISIBLE); break; // 任务结束 case ConstantUtil.END: if (VarUtil.result.equals(ConstantUtil.SUCCESS)) { holder.renew.setVisibility(View.GONE); holder.progress.setVisibility(View.GONE); } else if (VarUtil.result.equals(ConstantUtil.FAIL)) { holder.renew.setVisibility(View.VISIBLE); holder.progress.setVisibility(View.INVISIBLE); ViewUtil.toastShort("续借失败!", (Activity) context); } break; // 任务出错 case ConstantUtil.INTERNET_ERROR: ViewUtil.toastShort("客户端网络异常!请您稍后重试!", (Activity) context); break; default: break; } } } class ViewHolder { RelativeLayout item; TextView number; TextView name; TextView date; Button renew; ProgressBar progress; } @Override public int getCount() { return allBook.size(); } @Override public Object getItem(int arg0) { return allBook.get(arg0); } @Override public long getItemId(int arg0) { return arg0; }} 楼主,你好!我的也出现和你一样的状况。我的代码如下,麻烦帮忙看看哪里出了问题。小的不才,你提供的那段代码,我看不出具体在哪段代码上解决了问题。public class ContactInviteAdapter extends BaseAdapter { private Context mContext; private List<HashMap<String, Object>> contactLists; private LayoutInflater inflater; private boolean img_Flag = false; HashMap<Integer, Boolean> state = new HashMap<Integer, Boolean>(); //主要用来存储position对应的boolean数据 public ContactInviteAdapter(Context context, List<HashMap<String, Object>> contactFriends) { mContext = context; this.contactLists = contactFriends; inflater = LayoutInflater.from(mContext); initMap(); } private void initMap() { for (int i = 0; i < contactLists.size(); i++) { state.put(i, false); } } @Override public int getCount() { return contactLists == null?0:contactLists.size(); } @Override public Object getItem(int arg0) { return contactLists == null?0:contactLists.get(arg0); } @Override public long getItemId(int arg0) { return contactLists.indexOf(contactLists.get(arg0)); } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder = new ViewHolder(); View view = convertView; if(view == null) { view = inflater.inflate(R.layout.contact_find_all, null); } else { view = convertView; } holder.imgCheck = (ImageView) view.findViewById(R.id.contact_find_all_edit_id); holder.imgHead = (ImageView) view.findViewById(R.id.contact_img_id); holder.tvName = (TextView) view.findViewById(R.id.contact_name_id); holder.tvNumber = (TextView) view.findViewById(R.id.contact_number_id); holder.tvInvite = (TextView) view.findViewById(R.id.contact_inviteby_id); holder.imgHead.setBackgroundResource((Integer) contactLists.get(position).get("contactinviteimgHead")); holder.tvName.setText(contactLists.get(position).get("contactinvitename").toString()); holder.tvNumber.setText(contactLists.get(position).get("contactinvitenumber").toString()); holder.tvInvite.setText(contactLists.get(position).get("contactinviteBy").toString()); holder.imgCheck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(!state.get(position)) { holder.imgCheck.setImageDrawable(mContext.getResources().getDrawable(R.drawable.invitebuttonbk33)); } else { ; } img_Flag = !state.get(position); state.put(position, img_Flag); notifyDataSetChanged(); } }); return view; } static class ViewHolder { ImageView imgCheck; ImageView imgHead; TextView tvName; TextView tvNumber; TextView tvInvite; }} 你那个isRenew()的方法怎么写的啊 //不加这段就会出现混乱switch(curr.getVisibleState()) { case 1: holder.content.setVisibility(View.VISIBLE); break; case 0: holder.content.setVisibility(View.GONE); break; } //监听状态,更新状态码 trasHolder.arrow_down.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(curr.getVisibleState() == 1){ curr.setVisibleState(0); trasHolder.content.setVisibility(View.GONE); }else{ curr.setVisibleState(1); trasHolder.content.setVisibility(View.VISIBLE); } } }); android 如何解析webservice 传过来的list? 我发个问题,求高手进! 这样不能访问颜色? android 模拟listview单击事件 Android 腾讯微博OAuthV1如何关闭应用后再进入不用进行登录 SurfaceView做游戏,如何画面暂停? 在哪里能获得比较多的android的软件或结识做android的软件的人呢? 这个竖线是什么意思? 求android唱吧排行榜的效果 新手遇到问题,给按钮添加监听会出错! 一个layout中多个控件大小相等问题. 求如何在GridView底部加一个按钮
这句话什么意思?
用listView.setOnItemClickListener也一样啊我感觉你的错误应该是被点击的position和convertView混乱了导致的。
先写到OnItemClickListener里试试。
public View getView(final int position, View view, ViewGroup parent) {
// holder = new ViewHolder();
if (view == null) {
view = inflater.inflate(R.layout.custom_list_item, null);
} final Button praise = (Button) view.findViewById(R.id.praise);
praise.setText(allMessage.get(position).getPraNum() + "");
praise.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isPraised(allMessage.get(position).getMsgId())) {
ViewUtil.toastShort("你已经赞过了", context);
return;
}
Button btn = (Button)v;
btn.setText(allMessage.get(position).getPraNum() + 1 + "");
btn.setBackgroundResource(R.drawable.message_praise_yes);
new DownLoadThread(handler, allMessage.get(position).getMsgId())
.start();
}
});
}
给个getView的例子吧。
可以参考一下这个例子
http://download.csdn.net/detail/fzllz/5369093
import java.util.HashMap;import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;import com.mars.library.entry.BookMyBorrow;
import com.mars.library.main.R;
import com.mars.library.util.BookDetailHandler;
import com.mars.library.util.ConstantUtil;
import com.mars.library.util.RequestThread;
import com.mars.library.util.VarUtil;
import com.mars.library.util.ViewUtil;/**
* Book简单的适配器
*
* @author Administrator
*
*/
@SuppressLint({ "HandlerLeak", "UseSparseArrays" })
public class ListViewBookMyBorrowAdapter extends BaseAdapter { private Context context;
private ArrayList<BookMyBorrow> allBook;
private LayoutInflater inflater;
//同学:保存按钮的状态,来判断是否有这个按钮。不保存状态的话,下拉以后就可能不显示了。
//同学:因为这个保存是全部保存,而ListView的机制,是保存当前显示的,所以那个不靠谱。但是那个省内存。所以需要保存状态再保存,不需要就不要保存
private HashMap<Integer, Boolean> isCanRenew = new HashMap<Integer, Boolean>(); public ListViewBookMyBorrowAdapter(Context context, ArrayList<BookMyBorrow> allBook) {
this.context = context;
this.allBook = allBook;
this.inflater = LayoutInflater.from(context);
} @Override
public View getView(final int position, View view, ViewGroup parent) {
// 如果不加这行代码,很容易溢出
if (view == null) {
view = inflater.inflate(R.layout.book_my_borrow_item, null);
}
if (allBook.isEmpty()) {
return view;
}
final ViewHolder holder = new ViewHolder(); holder.item = (RelativeLayout) view.findViewById(R.id.item);
holder.number = (TextView) view.findViewById(R.id.number);
holder.name = (TextView) view.findViewById(R.id.name);
holder.date = (TextView) view.findViewById(R.id.date);
holder.renew = (Button) view.findViewById(R.id.renew);
holder.progress = (ProgressBar) view.findViewById(R.id.progressBar); holder.number.setText(allBook.get(position).getId());
holder.name.setText(allBook.get(position).getName());
holder.date.setText(allBook.get(position).getDate()); // 点击列表查看图书的详细信息
holder.item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lookUpBookDetail(position);
}
}); //同学:看这里
isCanRenew.put(position, allBook.get(position).isRenew());// 保存 //同学:看这里
if (isCanRenew.get(position) == false) {// 如果不可用
holder.renew.setVisibility(View.GONE);
} else {// 如果可以续借
holder.renew.setVisibility(View.VISIBLE);
holder.renew.setEnabled(true);
} holder.renew.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String url = VarUtil.URL + "/renew";
HashMap<String, String> allParams = new HashMap<String, String>();
allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount());
allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword());
allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode());
allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position).getDepartmentId());
allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId());
VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder),
allParams));
}
});// if (allBook.get(position).isRenew() == false) {
// holder.renew.setVisibility(View.GONE);
// } else {
// holder.renew.setVisibility(View.VISIBLE);
// holder.renew.setEnabled(true);
//
// holder.renew.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// String url = VarUtil.URL + "/renew";
// HashMap<String, String> allParams = new HashMap<String, String>();
// allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount());
// allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword());
// allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode());
// allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position)
// .getDepartmentId());
// allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId());
// VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder),
// allParams));
// }
// });
// } return view;
} private void lookUpBookDetail(int position) {
// 根据参数,请求数据
String url = ConstantUtil.URL + "/lib/detail.aspx";
HashMap<String, String> allParams = new HashMap<String, String>();
allParams.put(ConstantUtil.DETAIL, "true");
allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode()); BookDetailHandler handler = new BookDetailHandler((Activity) context); VarUtil.threadPool.submit(new RequestThread(url, handler, allParams));
} private class RenewHandler extends Handler {
private ViewHolder holder; public RenewHandler(ViewHolder holder) {
this.holder = holder;
} @Override
public void handleMessage(Message msg) {
switch (msg.what) {
// 任务开始
case ConstantUtil.START:
holder.renew.setVisibility(View.INVISIBLE);
holder.progress.setVisibility(View.VISIBLE);
break;
// 任务结束
case ConstantUtil.END:
if (VarUtil.result.equals(ConstantUtil.SUCCESS)) {
holder.renew.setVisibility(View.GONE);
holder.progress.setVisibility(View.GONE);
} else if (VarUtil.result.equals(ConstantUtil.FAIL)) {
holder.renew.setVisibility(View.VISIBLE);
holder.progress.setVisibility(View.INVISIBLE);
ViewUtil.toastShort("续借失败!", (Activity) context);
}
break;
// 任务出错
case ConstantUtil.INTERNET_ERROR:
ViewUtil.toastShort("客户端网络异常!请您稍后重试!", (Activity) context);
break;
default:
break;
}
}
} class ViewHolder {
RelativeLayout item;
TextView number;
TextView name;
TextView date;
Button renew;
ProgressBar progress;
} @Override
public int getCount() {
return allBook.size();
} @Override
public Object getItem(int arg0) {
return allBook.get(arg0);
} @Override
public long getItemId(int arg0) {
return arg0;
}}
不懂的再发我邮箱[email protected]
import java.util.HashMap;import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;import com.mars.library.entry.BookMyBorrow;
import com.mars.library.main.R;
import com.mars.library.util.BookDetailHandler;
import com.mars.library.util.ConstantUtil;
import com.mars.library.util.RequestThread;
import com.mars.library.util.VarUtil;
import com.mars.library.util.ViewUtil;/**
* Book简单的适配器
*
* @author Administrator
*
*/
@SuppressLint({ "HandlerLeak", "UseSparseArrays" })
public class ListViewBookMyBorrowAdapter extends BaseAdapter { private Context context;
private ArrayList<BookMyBorrow> allBook;
private LayoutInflater inflater;
//同学:保存按钮的状态,来判断是否有这个按钮。不保存状态的话,下拉以后就可能不显示了。
//同学:因为这个保存是全部保存,而ListView的机制,是保存当前显示的,所以那个不靠谱。但是那个省内存。所以需要保存状态再保存,不需要就不要保存
private HashMap<Integer, Boolean> isCanRenew = new HashMap<Integer, Boolean>(); public ListViewBookMyBorrowAdapter(Context context, ArrayList<BookMyBorrow> allBook) {
this.context = context;
this.allBook = allBook;
this.inflater = LayoutInflater.from(context);
} @Override
public View getView(final int position, View view, ViewGroup parent) {
// 如果不加这行代码,很容易溢出
if (view == null) {
view = inflater.inflate(R.layout.book_my_borrow_item, null);
}
if (allBook.isEmpty()) {
return view;
}
final ViewHolder holder = new ViewHolder(); holder.item = (RelativeLayout) view.findViewById(R.id.item);
holder.number = (TextView) view.findViewById(R.id.number);
holder.name = (TextView) view.findViewById(R.id.name);
holder.date = (TextView) view.findViewById(R.id.date);
holder.renew = (Button) view.findViewById(R.id.renew);
holder.progress = (ProgressBar) view.findViewById(R.id.progressBar); holder.number.setText(allBook.get(position).getId());
holder.name.setText(allBook.get(position).getName());
holder.date.setText(allBook.get(position).getDate()); // 点击列表查看图书的详细信息
holder.item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
lookUpBookDetail(position);
}
}); //同学:看这里
isCanRenew.put(position, allBook.get(position).isRenew());// 保存 //同学:看这里
if (isCanRenew.get(position) == false) {// 如果不可用
holder.renew.setVisibility(View.GONE);
} else {// 如果可以续借
holder.renew.setVisibility(View.VISIBLE);
holder.renew.setEnabled(true);
} holder.renew.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String url = VarUtil.URL + "/renew";
HashMap<String, String> allParams = new HashMap<String, String>();
allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount());
allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword());
allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode());
allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position).getDepartmentId());
allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId());
VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder),
allParams));
}
});// if (allBook.get(position).isRenew() == false) {
// holder.renew.setVisibility(View.GONE);
// } else {
// holder.renew.setVisibility(View.VISIBLE);
// holder.renew.setEnabled(true);
//
// holder.renew.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// String url = VarUtil.URL + "/renew";
// HashMap<String, String> allParams = new HashMap<String, String>();
// allParams.put(ConstantUtil.ACCOUNT, VarUtil.student.getAccount());
// allParams.put(ConstantUtil.PASSWORD, VarUtil.student.getPassword());
// allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode());
// allParams.put(ConstantUtil.DEPARTMENTID, allBook.get(position)
// .getDepartmentId());
// allParams.put(ConstantUtil.LIBRARYID, allBook.get(position).getLibraryId());
// VarUtil.threadPool.submit(new RequestThread(url, new RenewHandler(holder),
// allParams));
// }
// });
// } return view;
} private void lookUpBookDetail(int position) {
// 根据参数,请求数据
String url = ConstantUtil.URL + "/lib/detail.aspx";
HashMap<String, String> allParams = new HashMap<String, String>();
allParams.put(ConstantUtil.DETAIL, "true");
allParams.put(ConstantUtil.BARCODE, allBook.get(position).getBarcode()); BookDetailHandler handler = new BookDetailHandler((Activity) context); VarUtil.threadPool.submit(new RequestThread(url, handler, allParams));
} private class RenewHandler extends Handler {
private ViewHolder holder; public RenewHandler(ViewHolder holder) {
this.holder = holder;
} @Override
public void handleMessage(Message msg) {
switch (msg.what) {
// 任务开始
case ConstantUtil.START:
holder.renew.setVisibility(View.INVISIBLE);
holder.progress.setVisibility(View.VISIBLE);
break;
// 任务结束
case ConstantUtil.END:
if (VarUtil.result.equals(ConstantUtil.SUCCESS)) {
holder.renew.setVisibility(View.GONE);
holder.progress.setVisibility(View.GONE);
} else if (VarUtil.result.equals(ConstantUtil.FAIL)) {
holder.renew.setVisibility(View.VISIBLE);
holder.progress.setVisibility(View.INVISIBLE);
ViewUtil.toastShort("续借失败!", (Activity) context);
}
break;
// 任务出错
case ConstantUtil.INTERNET_ERROR:
ViewUtil.toastShort("客户端网络异常!请您稍后重试!", (Activity) context);
break;
default:
break;
}
}
} class ViewHolder {
RelativeLayout item;
TextView number;
TextView name;
TextView date;
Button renew;
ProgressBar progress;
} @Override
public int getCount() {
return allBook.size();
} @Override
public Object getItem(int arg0) {
return allBook.get(arg0);
} @Override
public long getItemId(int arg0) {
return arg0;
}}
public class ContactInviteAdapter extends BaseAdapter
{
private Context mContext;
private List<HashMap<String, Object>> contactLists;
private LayoutInflater inflater;
private boolean img_Flag = false;
HashMap<Integer, Boolean> state = new HashMap<Integer, Boolean>(); //主要用来存储position对应的boolean数据
public ContactInviteAdapter(Context context, List<HashMap<String, Object>> contactFriends)
{
mContext = context;
this.contactLists = contactFriends;
inflater = LayoutInflater.from(mContext);
initMap();
}
private void initMap()
{
for (int i = 0; i < contactLists.size(); i++)
{
state.put(i, false);
}
}
@Override
public int getCount()
{
return contactLists == null?0:contactLists.size();
} @Override
public Object getItem(int arg0)
{
return contactLists == null?0:contactLists.get(arg0);
} @Override
public long getItemId(int arg0)
{
return contactLists.indexOf(contactLists.get(arg0));
} @Override
public View getView(final int position, View convertView, ViewGroup parent)
{
final ViewHolder holder = new ViewHolder();
View view = convertView;
if(view == null)
{
view = inflater.inflate(R.layout.contact_find_all, null);
}
else
{
view = convertView;
}
holder.imgCheck = (ImageView) view.findViewById(R.id.contact_find_all_edit_id);
holder.imgHead = (ImageView) view.findViewById(R.id.contact_img_id);
holder.tvName = (TextView) view.findViewById(R.id.contact_name_id);
holder.tvNumber = (TextView) view.findViewById(R.id.contact_number_id);
holder.tvInvite = (TextView) view.findViewById(R.id.contact_inviteby_id);
holder.imgHead.setBackgroundResource((Integer) contactLists.get(position).get("contactinviteimgHead"));
holder.tvName.setText(contactLists.get(position).get("contactinvitename").toString());
holder.tvNumber.setText(contactLists.get(position).get("contactinvitenumber").toString());
holder.tvInvite.setText(contactLists.get(position).get("contactinviteBy").toString());
holder.imgCheck.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if(!state.get(position))
{
holder.imgCheck.setImageDrawable(mContext.getResources().getDrawable(R.drawable.invitebuttonbk33));
} else
{
;
}
img_Flag = !state.get(position);
state.put(position, img_Flag);
notifyDataSetChanged();
}
});
return view;
} static class ViewHolder
{
ImageView imgCheck;
ImageView imgHead;
TextView tvName;
TextView tvNumber;
TextView tvInvite;
}
}
//不加这段就会出现混乱
switch(curr.getVisibleState())
{
case 1:
holder.content.setVisibility(View.VISIBLE);
break;
case 0:
holder.content.setVisibility(View.GONE);
break;
}
//监听状态,更新状态码
trasHolder.arrow_down.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(curr.getVisibleState() == 1){
curr.setVisibleState(0);
trasHolder.content.setVisibility(View.GONE);
}else{
curr.setVisibleState(1);
trasHolder.content.setVisibility(View.VISIBLE);
}
}
});