【问题标题】:Android listview first and last item selected on small screen deviceAndroid listview 在小屏幕设备上选择的第一个和最后一个项目
【发布时间】:2015-05-12 10:27:32
【问题描述】:

我在小屏幕设备上的 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。

截图:

【问题讨论】:

  • 当item被点击时你会做什么?也发布该代码
  • 您的点击事件在哪里?还要在if(convertView==null) { 条件下初始化您的ViewHolder 对象。
  • 您使用什么方式显示项目选择

标签: java android xml listview android-listview


【解决方案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 不会错误地为您的最后一项添加突出显示。

【讨论】:

  • " getItemAtPosition(position).isHighlighted " 不是确切的语法,但我希望你明白这一点
【解决方案2】:

我也遇到过,你可以在 res 文件夹中创建一个 anim 文件夹,看下面的代码 创建一个文件名说, 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"

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2012-04-17
    • 1970-01-01
    • 2018-01-03
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多