我正在使用网格视图,其中我使用每个单元格的文本视图。我正在使用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;
}
答案 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
}
});