【问题标题】:Android disable listview itemsAndroid禁用列表视图项目
【发布时间】:2016-08-27 14:48:31
【问题描述】:

所以基本上我需要一些帮助或一些关于我遇到的问题的建议。我正在从数据库中填充我的列表视图,我需要在创建列表视图时检查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;
    }
}

有什么想法或建议吗?

【问题讨论】:

  • 你目前在用什么?您是否为列表视图定义了自定义适配器?
  • 是的,实际上我使用的是自定义适配器。让我放代码
  • 您可以这样做,在 getview 方法中,放入 if 条件并获取项目 ID,同时我相信您有另一个集合,其中您有要检查的 ID 列表,否则使用 id 进行选择查询,如果计数为 1 则表示其存在,否则不存在,如果存在,则将视图的 setEnabled 方法设置为 true 否则为 false。 (在列表视图的项目单击上执行此操作)

标签: android listview


【解决方案1】:

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

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

【讨论】:

  • 或者,更简单地说:return !(YOUR_CONDITION);,您可以在其中使用逆运算(!=== 进一步简化)。
  • 这正是我想要的!我很惊讶我读过的教程都没有提到它。
  • isEnabled 用于检测列表分隔符!!以这种方式使用它很诱人,但它会干扰列表分隔符的呈现方式! developer.android.com/reference/android/widget/…
【解决方案2】:

当您将对象列表传递给 BaseAdpater 时,在此列表的对象中添加一个名为 isEnabled 的字段并根据需要将其设置为 true/false,然后像这样覆盖 BaseAdapter 的 isEnabled 方法

@Override
public boolean isEnabled(int position) {

    return info.get(position).isEnabled;
}

其中 info 是您的对象列表

【讨论】:

    【解决方案3】:

    例如,如果您想禁用位置 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
    }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        在你的适配器中,添加这个。

        if ((position)!="your item"){
            view.setEnabled(true);
            view.setClickable(true);
        } else{
            view.setEnabled(false);
            view.setClickable(false);
        }
        

        `

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-09
          • 1970-01-01
          • 1970-01-01
          • 2014-02-18
          相关资源
          最近更新 更多