如何在android中的网格视图中禁用项目单击特定位置

时间:2011-04-01 14:16:20

标签: android

我正在使用网格视图,其中我使用每个单元格的文本视图。我正在使用onitemclick在单击网格单元格时执行某些操作。我想在网格视图中禁用项目单击特定位置。我怎么做。我使用convertView.setclickable(false)来获取getView中的特定位置,它给出了空指针异常。我怎么做??这是我的代码。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    textView = new TextView(context);
    textView.setLayoutParams(new GridView.LayoutParams(35, 35));
  } else {
    textView = (TextView) convertView;
  }

        textView.setTextSize(10);
        day_color = list.get(position).split("-");
        textView.setText(day_color[0]);

        if (day_color[1].equals("GREY")) {
            textView.setTextColor(Color.LTGRAY);
            //greyvalues.get(position)CalendarEvents
            convertView.setClickable(false);

        }
        if (day_color[1].equals("BLACK")) {
            textView.setTextColor(Color.BLACK);
        }
        if ((day_color[1].equals("BLUE"))) {
            textView.setTextColor(Color.RED);
        }

        setColor = Color.TRANSPARENT;
        if (position >= startPos && position <= endPos
                && selectdayselected != true) {
            setColor = Color.DKGRAY;
        }
        if (startPos == position && selectdayselected == true)
            setColor = Color.DKGRAY;
        textView.setBackgroundColor(setColor);


        return textView;
    }

5 个答案:

答案 0 :(得分:40)

在适配器覆盖中

@Override
public boolean areAllItemsEnabled() {
    return false;
}

并实施

@Override
public boolean isEnabled(int position) {
   // Return true for clickable, false for not
   return false;
}

答案 1 :(得分:2)

我使用textView.setEnabled(false)来禁用其onItemClick()。它对我有用。

答案 2 :(得分:1)

您需要在textView上进行设置。可能没有转换视图,当您在其上调用setClickable时会导致NPE。

答案 3 :(得分:1)

例如关于条件的代码示例:

.foo

你的情况可能是:

 @Override
public View getView(int position, View convertView, ViewGroup parent) {

...

        if (day_color[1].equals("GREY")) {
            textView.setTextColor(Color.LTGRAY);
            //greyvalues.get(position)CalendarEvents
            convertView.setClickable(false);
...

    }

代码在功能上:

                if (position == 0){
                    isEnabled(position)
                }

适合您需求的代码,我希望它适合您。

答案 4 :(得分:0)

我搜索了这个列表,找不到任何对我有用的答案。显然,我尝试了以下代码并且它有效。

我在网格中有一个textview,文本视图被禁用,但onClick方法适用于Grid(因为我们需要捕获点击的位置)并且它始终处于启用状态。所以,我决定检查网格的子元素是否启用或禁用...

grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> view, View cell, int position, long id)
        {
            if (grid.getChildAt(position).isEnabled()) //do whatever you want
}
});