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

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

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

Solutions Collecting From Web of "如何在android中的网格视图中禁用项目点击特定的位置"

在你的适配器覆盖

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

并执行

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

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

你需要在textView上设置它。 可能没有转换视图,当你调用setClickable时候会导致NPE。

像例如你的代码关于条件:

  @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) } 

代码function上:

  @Override public View getView(int position, View convertView, ViewGroup parent) { ... if (position == 0){ isEnabled(position) } ... } @Override public boolean isEnabled(int position){ if(position == 0) return false; else return true; } @Override public boolean areAllItemsEnabled(){ return true; } 

代码适应你的需要,我希望它为你工作。

我已经search了这个列表,找不到任何适合我的答案。 显然,我试了下面的代码,它的工作。

我在网格中有一个textview和文本视图被禁用,但是onClick方法是为网格(因为我们需要捕获点击的位置),它始终启用。 所以,我决定检查网格的子元素是否启用或禁用像这样…

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