[英]Issue with ImageButton onClickListener in baseAdapter
我在base adapter
视图持有ImageButton
有ImageButton
。 我在GetView中为ImageButton
设置图像。 一切正常。 然后为该ImageButton
设置onClickListener
。 因此,现在,当我单击该ImageButton
时,我需要更改该ImageButton
的背景图像。
package com.virtual.applets.moments.adapter;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public class MomentsAdapter extends BaseAdapter {
Context mContext;
LayoutInflater mLayoutInflater;
List<Moments> mReturnDataMomentsList;
private int[] mIcons = { R.drawable.like_grey, R.drawable.dislike_grey, R.drawable.abuse_grey };
private int[] mSelectedIcons = { R.drawable.like_selected, R.drawable.dislike_selected, R.drawable.abuse_selected };
ViewHolder holder;
public MomentsAdapter(FragmentActivity activity, List<Moments> momentsListt) {
this.mContext = activity;
this.mLayoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.mReturnDataMomentsList = momentsList;
}
@Override
public int getCount() {
return mReturnDataMomentsList.size();
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
holder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.moments_custom_screen, null);
holder.mLikeBtn = (ImageButton) convertView.findViewById(R.id.like_btn);
holder.mLikeBtn.setImageResource(mIcons[0]);
holder.mDisLikeBtn.setImageResource(mIcons[1]);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.mLikeBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
holder.mLikeBtn.setImageResource(mSelectedIcons[0]);
}
});
return convertView;
}
public class ViewHolder {
ImageButton mLikeBtn, mDisLikeBtn, mAbuseBtn, mCommentBtn;
}
}
在片段中,我称这个适配器为
MomentsAdapter momentsAdapter = new MomentsAdapter((FragmentActivity) getActivity(), mReturnDataMomentsList);
mListview.setAdapter(momentsAdapter);
在这里查看本教程。 它显示了如何在Listview
项中添加多个可单击项。
要更改选定Button
的背景,您必须保存选定的按钮,因为Listview
离开屏幕时会破坏其views
。 按照自定义适配器的代码获取所需的结果。
此处,所选按钮的位置保存在SpareseBooleanArray
并根据其值设置更改了背景。
private class CustomAdapter extends ArrayAdapter{
private SparseBooleanArray selectedItems;
public CustomAdapter(Context context, int resource) {
super(context, resource);
selectedItems = new SparseBooleanArray();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(convertView == null){
//Inflate your view here
}
ImageButton imageButton = (ImageButton) convertView.findViewById(R.id.imageButton);
if (selectedItems.get(position)){
//SET your selected background of imageButton here
}else{
//SET your unselected chackground of imageButton here
}
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!selectedItems.get(position)){
selectedItems.put(position,true);
//SET your selected background of imageButton here
}else{
selectedItems.delete(position);
//SET your unselected background of imageButton here
}
}
});
return super.getView(position, convertView, parent);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.