Android禁用listview项目

And*_*oid 18 android listview

所以我基本上需要一些帮助或一些有问题的建议.我正在从数据库填充我的列表视图,如果项目的id position与我数据库中另一个表的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法或建议如何做到这一点?

ble*_*enm 68

在适配器中有一个方法名称isEnabled,您可以覆盖它.像getview一样调用每一行.只有当此函数返回true时,onclicklistener才会触发.所以尝试在您的自定义适配器中执行此操作.

@Override
public boolean isEnabled(int position) {
    if(YOUR CONDTITION){
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 或者,更简单:`return!(YOUR_CONDITION);`,你可以使用逆操作(`!=`vs` ==`进一步简化). (6认同)
  • 很好的答案.我想知道为什么不接受这个? (3认同)

SBe*_*413 0

不确定你在那里做什么,但你想要做的是像通常一样通过扩展 Activity (或 ListActivity)来定义你的类。然后通过扩展 BaseAdapter 使您的适配器类成为 Activity 类中的嵌套类。

完成此操作后,您将在适配器类中编写 getView() 方法。根据您提到的条件将 OnClickListener 分配给那里的视图。