所以基本上我需要一些帮助或一些有问题的建议。我正在从数据库填充我的列表视图,如果position
上的项目ID与我数据库中另一个表的id相同,我需要检查我何时创建listview。如果是,你可以点击那个项目,如果不是我希望它禁用它,但我找到的关于如何做的所有信息......我真的不明白该怎么做。
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
//For more information look at the bottom of file.
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private String[] data;
private ArrayList<String> name;
private ArrayList<String> info;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
private Bitmap b;
public LazyAdapter(Activity a, Bitmap d, ArrayList<String> names, ArrayList<String> information) {
activity = a;
b=d;
name=names;
info = information;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return name.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public static class ViewHolder{
public TextView name,info;
public ImageView image;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(convertView==null){
vi = inflater.inflate(R.layout.item, null);
holder=new ViewHolder();
holder.name=(TextView)vi.findViewById(R.id.name);
holder.info=(TextView)vi.findViewById(R.id.info);
holder.image=(ImageView)vi.findViewById(R.id.image);
vi.setTag(holder);
Log.v("Position","Position : "+position);
}
else
holder=(ViewHolder)vi.getTag();
holder.name.setText(name.get(position));
holder.info.setText(info.get(info.size()-1));
//Here I must do a black magic and get the images if user had 'em.
holder.image.setImageBitmap(b);
//holder.image.setTag(data[position]);
//imageLoader.DisplayImage(data[position], activity, holder.image);
// Black magic over.
return vi;
}
}
有任何想法或建议怎么做?
答案 0 :(得分:68)
在适配器中有一个方法名称isEnabled,您可以覆盖它。像getview一样调用每一行。只有当此函数返回true时,onclicklistener才会触发。所以尝试在自定义适配器中执行此操作。
@Override
public boolean isEnabled(int position) {
if(YOUR CONDTITION){
return false;
}
return true;
}
答案 1 :(得分:2)
当您将对象列表传递给BaseAdpater时,在此列表的对象中添加一个名为isEnabled的字段,并根据需要将其设置为true / false,然后覆盖BaseAdapter的isEnabled方法,如下所示
@Override
public boolean isEnabled(int position) {
return info.get(position).isEnabled;
}
其中info是您的对象列表
答案 2 :(得分:2)
例如,如果要禁用位置0到5
@Override
public boolean isEnabled(int position){
if(position >= 0 && position < 6)
return false;
else
return true;
}
@Override
public boolean areAllItemsEnabled(){
return true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//CODE OF ADAPTER
}
答案 3 :(得分:0)
不确定你在那里做什么,但你想要做的是像通常通过扩展Activity(或ListActivity)来定义你的类。然后通过扩展BaseAdapter使您的适配器类成为Activity类中的嵌套类。
完成后,您将在适配器类中编写getView()方法。根据您提到的条件,将OnClickListener分配给视图。
答案 4 :(得分:-1)
在适配器中,添加此项。
if ((position)!="your item"){
view.setEnabled(true);
view.setClickable(true);
} else{
view.setEnabled(false);
view.setClickable(false);
}
`