Android列表视图在小屏幕设备上选择的第一个和最后一个项目

时间:2015-05-12 10:27:32

标签: java android xml listview android-listview

我的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。

截图:

2 个答案:

答案 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"

希望这会对你有所帮助