点击事件写在外层OnItemClickListener中。
解决方案 »
- Android APK反编译工具小改进
- 玩过Android完美钢琴或其他乐曲的进来帮忙看看~~
- 请问,哪位知道哪里有可运行的android calendar(日程表)的源代码或者例子?
- android开发中listview 里面有三列数据前面两列根据第三列的排名情况来确定更新?
- android源码编译通过后编译单个模块时输出很多.ogg ignored.是怎么回事?
- android 瀑布流Bitmap OOM
- 朋友求个安卓app,询问下报价
- 请问谁有listview包含下拉刷新、底部加载更多、滑动出现删除按钮的Demo啊?急
- 这个怎么解决啊?新手求教
- AndroidWear开发APi调用
- 一个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);
}
}
});