Android禁用ListView的项目。

18

基本上我需要一些帮助或建议来解决我的问题。我正在从数据库中填充我的列表视图,并且我需要在创建列表视图时检查position上的项目ID是否与我的数据库中另一个表中的ID相同。如果是,您可以单击该项,如果不是,则禁用它,但是我找到的所有关于如何做到这一点的信息...我真的无法理解如何做到这一点。

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;
    }
}

有什么想法或建议来完成这件事吗?


你目前在使用什么?你为ListView定义了自定义适配器吗? - Paresh Mayani
是的,实际上我正在使用自定义适配器。让我放一下代码。 - Android-Droid
你可以在getView方法中加入一个if条件,并获取item id,同时我相信你有另一个集合,其中包含要检查的id列表,否则可以使用id进行选择查询,如果计数为1,则表示存在,否则不存在。如果存在,则将视图的setEnabled方法设置为true,否则为false。(在ListView的项单击事件上执行此操作) - Rat-a-tat-a-tat Ratatouille
5个回答

69

在适配器中有一个名为isEnabled的方法,您可以重写它。 这将像getview一样为每一行调用。仅当此函数返回true时,onclicklistener才会触发。 因此,请尝试在自定义适配器中执行此操作。

@Override
public boolean isEnabled(int position) {
    if(YOUR CONDTITION){
        return false;
    }
    return true;
}

6
更简单地说,可以使用反向操作符(!= 而不是 ==)将代码进一步简化为 return !(YOUR_CONDITION); - reece
这正是我一直在寻找的!我很惊讶我阅读的所有教程中都没有提到它。 - Aelexe
isEnabled 用于检测列表分隔符!虽然这样做很诱人,但它会干扰列表分隔符的呈现方式!https://developer.android.com/reference/android/widget/BaseAdapter.html#isEnabled(int) - Bakhshi

2
当您将对象列表传递给BaseAdapter时,请在此列表的对象中添加一个名为isEnabled的字段,并根据需要将其设置为true/false,然后像这样覆盖BaseAdapter的isEnabled方法。
@Override
public boolean isEnabled(int position) {

    return info.get(position).isEnabled;
}

这里的 "info" 是你的对象列表


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
}

0

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

完成上述步骤后,在你的适配器类中编写getView()方法。根据你提到的条件,在那里为视图分配OnClickListener。


-1
在你的适配器中添加这个。
if ((position)!="your item"){
    view.setEnabled(true);
    view.setClickable(true);
} else{
    view.setEnabled(false);
    view.setClickable(false);
}

`


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接