禁用与选择器和IsEnabled的列表视图项() [英] Disable listview items with selector and isEnabled()
问题描述
范围: - 使用被覆盖的ArrayAdapter; - 使用选择; - 使用IsEnabled的禁用物品
目标: - 禁用一些列表项,并通过选择器加载禁用状态视图
问题: - 一切正常(自定义视图,选择了重点不突出,focuesd和pressed状态),但已禁用的项目不使用选择器禁用状态
。调查:(!)。当我使用的IsEnabled禁用列表视图中的层次浏览器的一些项目表明已禁用的项目unfocusable,不可点击,但启用
它是一个错误或缺了点什么?
P.S。实际上,文档说的IsEnabled没有为列表项目做的setEnabled(假),它使一个分频器(?)对象。 PPS我还试图用if语句来设置我的观点(在getView)为IsEnabled的(假)。但它仅适用于重点项目?
我的选择是这样的:
< XML版本=1.0编码=UTF-8&GT?;
<选择的xmlns:机器人=http://schemas.android.com/apk/res/android>
<! - 禁用 - >
<项目
机器人:state_enabled =假
机器人:文字颜色=@色/ greyDark
机器人:可绘制=@可绘制/ list_item_disabled/>
< - !pressed - >
<项目
机器人:state_enabled =真
机器人:STATE_ pressed =真
机器人:文字颜色=@机器人:彩色/白
机器人:可绘制=@可绘制/ list_item_ pressed/>
<! - 聚焦 - >
<项目
机器人:state_enabled =真
机器人:state_focused =真
机器人:文字颜色=@机器人:彩色/白
机器人:可绘制=@可绘制/ list_item_focused/>
<! - 默认 - >
<项目
机器人:state_enabled =真
机器人:可绘制=@可绘制/ list_item_unfocused/>
< /选择器>
哈克: 使用getView检查禁用的项目的逻辑和观点膨胀与另一布局。 IsEnabled的仍然是有用的。
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
LayoutInflater充气=(LayoutInflater)mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
查看排;
如果(mListItem [位置] .isEnabled()==假)行= inflater.inflate(
R.layout.list_row_disabled,NULL);
其他 {
行= inflater.inflate(R.layout.list_row,NULL);
//设置正确的扩展图标
如果(mListItem [位置] .getType()){
ImageView的ic_arrow =(ImageView的)row.findViewById(R.id.list_row_arrow);
ic_arrow.setImageResource(R.drawable.ic_arrow_right);
}
}
//设置左图标
ImageView的ic_item =(ImageView的)row.findViewById(R.id.list_row_icon);
ic_item.setImageResource(mListItem [位置] .getIcon());
//混合图标,如果项目被禁用
如果(mListItem [位置] .isEnabled()==假)
ic_item.setColorFilter(0x99D0D0D0,Mode.SRC_ATOP); //使图标看起来灰暗
//设置标题文字
TextView的txvTitle =(TextView中)row.findViewById(R.id.list_row_title);
txvTitle.setText(mListItem [位置] .getTitle());
返回行;
}
@覆盖
公共布尔的IsEnabled(INT位置){
返回mListItem [位置] .isEnabled();
}
Scope: - using overriden ArrayAdapter; - using selector; - using isEnabled for disabling items.
Aim: - disable some list items and load disabled state view via selector.
Problem: - everything works (custom view, selector for unfocused, focuesd and pressed states) but disabled items don't use selector for disabled state.
Investigating: when I use isEnabled for disabling some items in listview Hierarchy Viewer shows that disabled items are unfocusable, unclickable but(!) enabled.
Is it a bug or something is missing?
P.S. actually, docs say that isEnabled doesn't do setEnabled(false) for list item, it makes it a divider(?) object. P.P.S I also tried to use if-statement to set my View (in getView) as isEnabled(false). But it works only for focused items?
My Selector looks like:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Disabled -->
<item
android:state_enabled="false"
android:textColor="@color/greyDark"
android:drawable="@drawable/list_item_disabled" />
<!-- Pressed -->
<item
android:state_enabled="true"
android:state_pressed="true"
android:textColor="@android:color/white"
android:drawable="@drawable/list_item_pressed" />
<!-- Focused -->
<item
android:state_enabled="true"
android:state_focused="true"
android:textColor="@android:color/white"
android:drawable="@drawable/list_item_focused" />
<!-- Default -->
<item
android:state_enabled="true"
android:drawable="@drawable/list_item_unfocused" />
</selector>
Hack: use getView to check disabled item logic and inflate view with another layout. isEnabled is still usefull.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row;
if (mListItem[position].isEnabled() == false) row = inflater.inflate(
R.layout.list_row_disabled, null);
else {
row = inflater.inflate(R.layout.list_row, null);
// set right extensible icon
if (mListItem[position].getType()) {
ImageView ic_arrow = (ImageView) row.findViewById(R.id.list_row_arrow);
ic_arrow.setImageResource(R.drawable.ic_arrow_right);
}
}
// set left icon
ImageView ic_item = (ImageView) row.findViewById(R.id.list_row_icon);
ic_item.setImageResource(mListItem[position].getIcon());
// blend icon if item is disabled
if (mListItem[position].isEnabled() == false)
ic_item.setColorFilter(0x99D0D0D0,Mode.SRC_ATOP); // make icons look grayer
// set title text
TextView txvTitle = (TextView) row.findViewById(R.id.list_row_title);
txvTitle.setText(mListItem[position].getTitle());
return row;
}
@Override
public boolean isEnabled(int position) {
return mListItem[position].isEnabled();
}
这篇关于禁用与选择器和IsEnabled的列表视图项()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!