我的ListView在小屏幕设备上有问题,当我们点击列表的第一项并滚动到最后,我们看到最后一项选择了第一项的颜色。
我的适配器代码的一部分:
public static class ViewHolder {
TextView mItemTitleView;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
viewHolder = new ViewHolder();
if (convertView == null) {
convertView = mInflater.inflate(this.mLayoutId, parent, false);
viewHolder.mItemTitleView = (TextView) convertView.findViewById(R.id.itemtitle);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Typeface futura_font = Typeface.createFromAsset(getContext().getAssets(), "fonts/Futura.ttf");
viewHolder.mRadioNameView.setTypeface(futura_font);
viewHolder.mItemTitleView.setText("Something");
return convertView;
}
测试设备:Android 2.3.7上的三星Galaxy S2。
截图:
答案 0 :(得分:1)
一周前我遇到了这个问题。 用于突出显示项目的代码必须位于getView函数中,而不是在其外部,因为每次滚动时都会调用getView。
像这样添加:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
viewHolder = new ViewHolder();
if (convertView == null) {
convertView = mInflater.inflate(this.mLayoutId, parent, false);
viewHolder.mItemTitleView = (TextView) convertView.findViewById(R.id.itemtitle);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Typeface futura_font = Typeface.createFromAsset(getContext().getAssets(), "fonts/Futura.ttf");
viewHolder.mRadioNameView.setTypeface(futura_font);
viewHolder.mItemTitleView.setText("Something");
if(getItemAtPosition(position).isHighlighted){
//add hightlighting to item like you did outside of getView
//in your app, highlighting an item makes its text red
//so you should put the code that makes the text red here
}
return convertView;
}
如果您为保存布尔值更高的变量的每个项目,这将有效。
添加后,getView不会错误地将突出显示添加到您的上一个项目。
答案 1 :(得分:1)
我遇到过同样的问题,你可以在res文件夹中创建一个动画文件夹,请参阅下面的代码 创建一个文件名说, bg_press.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/bg_press_default" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/bg_item_list" /> <!-- focused -->
<item android:drawable="@drawable/bg_item" /> <!-- default -->
</selector>
注意:您也可以使用颜色代替图像作为此文件中的背景。
在您的行xml中使用此作为,
android:background="bg_press"
希望这会对你有所帮助