Android 自定义列表视图以编程方式单击项目
Android Custom Listview Programmatically Click Item
我正在使用自定义单选列表视图。我想以编程方式调用 ItemOnClickListener
。我在 xml 中使用 android:listSelector="#47D149"
属性。我看到了this post。 performItemClick
功能正常,但不会更改列表项的背景。
我该怎么办?
有什么建议么。谢谢!
样本
ListView
<ListView
android:id="@+id/navigation_menu_container"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_below="@id/rlBanner"
android:layout_gravity="start"
android:background="@color/nyc_black"
android:choiceMode="singleChoice"
android:divider="@color/border_black"
android:dividerHeight="@dimen/divider_height"
android:listSelector="@drawable/item_selector" >
drawables/item_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_activated="false" android:drawable="@drawable/item_normal"></item>
<item android:state_pressed="true" android:drawable="@drawable/item_pressed"></item>
<item android:state_activated="true" android:drawable="@drawable/item_pressed"></item>
</selector>
drawables/item_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid
android:color="@color/black"
/>
</shape>
drawables/item_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid
android:color="@color/red"
/>
</shape>
试试上面的示例。 :) 告诉我它是否有效
也许你可以在你的适配器中处理它?
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
if (null == convertView) {
LayoutInflater inflater = (LayoutInflater) _context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, parent, false);
}
if(this.getItem(position).isChecked()){
convertView.setBackgroundResource(android.R.color.holo_blue_bright);
}else{
convertView.setBackgroundResource(android.R.color.white);
}
final View tempFinalView = convertView;
tempFinalView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getItem(position).isChecked()) {
getItem(position).setChecked(false);
tempFinalView.setBackgroundResource(R.color.white);
} else {
getItem(position).setChecked(true);
tempFinalView.setBackgroundResource(R.color.pressed);
}
}
}
);
return convertView;
}
编辑:
如果您不想向 item.You 添加另一个变量,可以改用标签功能。
只需设置并获取标签。
私有静态整数 VIEW_TAG=99;
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
如果(null == convertView){
LayoutInflater inflater = (LayoutInflater) _context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, parent, false);
}
if((Boolean)convertView.getTag(VIEW_TAG)){
convertView.setBackgroundResource(android.R.color.holo_blue_bright);
}else{
convertView.setBackgroundResource(android.R.color.white);
}
final View tempFinalView = convertView;
tempFinalView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getItem(position).isChecked()) {
convertView.setTag(VIEW_TAG,new Boolean(false));
tempFinalView.setBackgroundResource(R.color.white);
} else {
convertView.setTag(VIEW_TAG,new Boolean(true));
tempFinalView.setBackgroundResource(R.color.pressed);
}
}
}
);
return 转换视图;
}
好的。我找到了解决方案。 :) @Shifar Shifz 回答,不要使用
android:listSelector="@drawable/item_selector"
取而代之的是,将此可绘制对象 xml 添加到您的 row.xml 布局中作为背景
android:background="@drawable/item_selector"
我正在使用自定义单选列表视图。我想以编程方式调用 ItemOnClickListener
。我在 xml 中使用 android:listSelector="#47D149"
属性。我看到了this post。 performItemClick
功能正常,但不会更改列表项的背景。
我该怎么办? 有什么建议么。谢谢!
样本
ListView
<ListView
android:id="@+id/navigation_menu_container"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_below="@id/rlBanner"
android:layout_gravity="start"
android:background="@color/nyc_black"
android:choiceMode="singleChoice"
android:divider="@color/border_black"
android:dividerHeight="@dimen/divider_height"
android:listSelector="@drawable/item_selector" >
drawables/item_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_activated="false" android:drawable="@drawable/item_normal"></item>
<item android:state_pressed="true" android:drawable="@drawable/item_pressed"></item>
<item android:state_activated="true" android:drawable="@drawable/item_pressed"></item>
</selector>
drawables/item_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid
android:color="@color/black"
/>
</shape>
drawables/item_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid
android:color="@color/red"
/>
</shape>
试试上面的示例。 :) 告诉我它是否有效
也许你可以在你的适配器中处理它?
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
if (null == convertView) {
LayoutInflater inflater = (LayoutInflater) _context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, parent, false);
}
if(this.getItem(position).isChecked()){
convertView.setBackgroundResource(android.R.color.holo_blue_bright);
}else{
convertView.setBackgroundResource(android.R.color.white);
}
final View tempFinalView = convertView;
tempFinalView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getItem(position).isChecked()) {
getItem(position).setChecked(false);
tempFinalView.setBackgroundResource(R.color.white);
} else {
getItem(position).setChecked(true);
tempFinalView.setBackgroundResource(R.color.pressed);
}
}
}
);
return convertView;
}
编辑: 如果您不想向 item.You 添加另一个变量,可以改用标签功能。
只需设置并获取标签。
私有静态整数 VIEW_TAG=99;
@Override public View getView(final int position, View convertView, final ViewGroup parent) { 如果(null == convertView){ LayoutInflater inflater = (LayoutInflater) _context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.list_item, parent, false); }
if((Boolean)convertView.getTag(VIEW_TAG)){
convertView.setBackgroundResource(android.R.color.holo_blue_bright);
}else{
convertView.setBackgroundResource(android.R.color.white);
}
final View tempFinalView = convertView;
tempFinalView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getItem(position).isChecked()) {
convertView.setTag(VIEW_TAG,new Boolean(false));
tempFinalView.setBackgroundResource(R.color.white);
} else {
convertView.setTag(VIEW_TAG,new Boolean(true));
tempFinalView.setBackgroundResource(R.color.pressed);
}
}
}
);
return 转换视图; }
好的。我找到了解决方案。 :) @Shifar Shifz 回答,不要使用
android:listSelector="@drawable/item_selector"
取而代之的是,将此可绘制对象 xml 添加到您的 row.xml 布局中作为背景
android:background="@drawable/item_selector"