ListView android 失去背景颜色
ListView android looses background color
我有一个适配器,它扩展了 ArrayAdapter> 每次都有多个选择填充片段布局。
问题是有时背景会在之前选择的项目或所有其他项目上完全消失。如果你检查这张图片
http://i.imgur.com/S1KEfM1.png
可以看到ccc选项丢失背景。布局膨胀此相对布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="67dp"
android:background="@drawable/selectable_background_example"
android:descendantFocusability="blocksDescendants"
android:gravity="center_vertical"
android:paddingLeft="20dp"
android:paddingRight="10dp" >
有了这个背景xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:drawable="@drawable/list_focused_example" android:state_focused="true" android:state_pressed="false"/>
<item android:drawable="@drawable/pressed_background_example" android:state_pressed="true"/>
<item android:drawable="@drawable/pressed_background_example" android:state_selected="true"/>
<item android:drawable="@drawable/pressed_background_example" android:state_activated="true"/>
<item android:drawable="@drawable/new_strip"/>
</selector>
Pressed_background_example
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@color/pressed_example" />
<stroke
android:width="3dp"
android:color="@color/pressed_example" />
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
</shape>
Pressed_example
<resources>
<color name="pressed_example">#CCCC0000</color>
</resources>
而 new_strip 基本上只是带边框的背景白色图像,list_focused_example 是按下复选框的图像。
在我的 class
中获取视图
public View getView(int position, View convertView, ViewGroup parent) {
Holder mhHolder;
if (convertView == null) {
mhHolder = new Holder();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_a, parent, false);
mhHolder.txtValue = (TextView) convertView.findViewById(R.id.txtValue);
mhHolder.txtCheckbox = (CheckBox) convertView.findViewById(R.id.checkBox1);
mhHolder.txtText = (TextView) convertView.findViewById(R.id.txtText);
convertView.setTag(mhHolder);
} else {
mhHolder = (Holder) convertView.getTag();
}
HashMap<String, String> hm = values.get(position);
mhHolder.txtValue.setText(hm.get("Value"));
mhHolder.txtText.setText(hm.get("Text"));
mhHolder.txtCheckbox.setVisibility(View.VISIBLE);
//TODO CHANGE WHEN CHECKED IS SEND
mhHolder.txtCheckbox.setChecked(Base.checked[position]);
}
有没有人知道为什么背景在以前选择的项目上消失,或者有时在除所选项目之外的所有项目上消失。
我认为这是一种错误(或者我没有真正理解真正的功能)。
无论如何你应该尝试调用
mhHolder.txtValue.setbackground(R.drawable.selectable_background_example);
在您的代码中,以便为每个项目执行。
最终问题出在图像上(new_strip)。我不得不制作一个与图像相同的可绘制对象(只有白色背景和灰色圆角),这样就解决了问题。
我有一个适配器,它扩展了 ArrayAdapter> 每次都有多个选择填充片段布局。 问题是有时背景会在之前选择的项目或所有其他项目上完全消失。如果你检查这张图片 http://i.imgur.com/S1KEfM1.png
可以看到ccc选项丢失背景。布局膨胀此相对布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="67dp"
android:background="@drawable/selectable_background_example"
android:descendantFocusability="blocksDescendants"
android:gravity="center_vertical"
android:paddingLeft="20dp"
android:paddingRight="10dp" >
有了这个背景xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:drawable="@drawable/list_focused_example" android:state_focused="true" android:state_pressed="false"/>
<item android:drawable="@drawable/pressed_background_example" android:state_pressed="true"/>
<item android:drawable="@drawable/pressed_background_example" android:state_selected="true"/>
<item android:drawable="@drawable/pressed_background_example" android:state_activated="true"/>
<item android:drawable="@drawable/new_strip"/>
</selector>
Pressed_background_example
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@color/pressed_example" />
<stroke
android:width="3dp"
android:color="@color/pressed_example" />
<padding
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp" />
</shape>
Pressed_example
<resources>
<color name="pressed_example">#CCCC0000</color>
</resources>
而 new_strip 基本上只是带边框的背景白色图像,list_focused_example 是按下复选框的图像。
在我的 class
中获取视图public View getView(int position, View convertView, ViewGroup parent) {
Holder mhHolder;
if (convertView == null) {
mhHolder = new Holder();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.row_a, parent, false);
mhHolder.txtValue = (TextView) convertView.findViewById(R.id.txtValue);
mhHolder.txtCheckbox = (CheckBox) convertView.findViewById(R.id.checkBox1);
mhHolder.txtText = (TextView) convertView.findViewById(R.id.txtText);
convertView.setTag(mhHolder);
} else {
mhHolder = (Holder) convertView.getTag();
}
HashMap<String, String> hm = values.get(position);
mhHolder.txtValue.setText(hm.get("Value"));
mhHolder.txtText.setText(hm.get("Text"));
mhHolder.txtCheckbox.setVisibility(View.VISIBLE);
//TODO CHANGE WHEN CHECKED IS SEND
mhHolder.txtCheckbox.setChecked(Base.checked[position]);
}
有没有人知道为什么背景在以前选择的项目上消失,或者有时在除所选项目之外的所有项目上消失。
我认为这是一种错误(或者我没有真正理解真正的功能)。
无论如何你应该尝试调用
mhHolder.txtValue.setbackground(R.drawable.selectable_background_example);
在您的代码中,以便为每个项目执行。
最终问题出在图像上(new_strip)。我不得不制作一个与图像相同的可绘制对象(只有白色背景和灰色圆角),这样就解决了问题。