在开发中有时候会遇到当item数量超过gridview的高度时,会出现设置了setItemClick事件依然不管用的情况,该怎么解决呢,代码如下:
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.xinrui.filemanager.R;
import com.xinrui.filemanager.entity.FileItem;
import java.util.ArrayList;
import java.util.List;
public class FileGridViewAdapter extends BaseAdapter {
private ArrayList<FileItem> myAppInfos;
private LayoutInflater inflater;
private Context context;
private int display_type = 0;
private boolean isDisplay = false,isChecked = false;
private OnClickListener onClickListener;
private List<String> checkBoxIDList; //存储checkBox的值
public List<String> getCheckBoxIDList() {
return checkBoxIDList;
}
public FileGridViewAdapter(Context context, ArrayList<FileItem> myAppInfos,int display_type) {
this.context = context;
this.myAppInfos = myAppInfos;
inflater = LayoutInflater.from(context);
this.display_type = display_type;
checkBoxIDList = new ArrayList<>();
}
public void setOnClickListener(OnClickListener onClickListener){this.onClickListener = onClickListener;}
public void setIsDisplay(boolean isDisplay){
this.isDisplay = isDisplay;
}
public void setIsChecked(boolean isChecked){
this.isChecked = isChecked;
}
/**
* 先判断数据集的大小是否足够显示满本页?myAppInfos.size() > (mIndex + img1)*mPagerSize
* 如果满足,则此页就显示最大数量mPagerSize的个数
* 如果不够显示每页的最大数量,那么剩下几个就显示几个 (myAppInfos.size() - mIndex*mPagerSize)
*/
@Override
public int getCount() {
return myAppInfos.size();
}
@Override
public Object getItem(int position) {
return myAppInfos.get(position );
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
holder = new ViewHolder();
if(display_type == 1) {
convertView = inflater.inflate(R.layout.file_samll_item_gridview, parent, false);
} else if(display_type == 2){
convertView = inflater.inflate(R.layout.file_large_item_gridview, parent, false);
} else {
convertView = inflater.inflate(R.layout.file_item_gridview, parent, false);
holder.file_date = (TextView) convertView.findViewById(R.id.file_date);
holder.file_size = (TextView) convertView.findViewById(R.id.file_size);
}
holder.file_name = (TextView) convertView.findViewById(R.id.file_name);
holder.file_image = (ImageView) convertView.findViewById(R.id.file_img);
holder.file_checkbox = (CheckBox)convertView.findViewById(R.id.file_checkbox);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
final FileItem fileItem = myAppInfos.get(position);
holder.file_name.setText(fileItem.getFile_name());
holder.file_image.setImageResource(fileItem.getFileImgId());
if(isDisplay){
holder.file_checkbox.setVisibility(View.VISIBLE);
holder.file_checkbox.setChecked(isChecked);
holder.file_checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
if(!checkBoxIDList.contains(fileItem.getFile_path())) {
checkBoxIDList.add(fileItem.getFile_path());
}
}else{
checkBoxIDList.remove(fileItem.getFile_path());
}
}
});
}
if(display_type==0) {
holder.file_date.setText(fileItem.getFile_date());
holder.file_size.setText(fileItem.getFile_longth());
if (position % 2 == 0) {
convertView.setBackgroundResource(R.drawable.file_item_tap);
}else{
convertView.setBackgroundResource(android.R.color.transparent);
}
}
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(onClickListener!=null)
onClickListener.onClick(position);
}
});
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(onClickListener!=null)
onClickListener.onLongClick(position);
return true;
}
});
return convertView;
}
class ViewHolder{
private TextView file_name,file_date,file_size;
private ImageView file_image;
private CheckBox file_checkbox;
}
public interface OnClickListener{
public void onClick(int position);
public void onLongClick(int position);
}
}
为Adapter添加一个回调接口,当点击时,就可以回调点击事件给主页面,就可以解决这个问题了