Android ListView不能使用ViewHolder平滑滚动

时间:2017-08-14 15:59:21

标签: android listview adapter

您好,对不起另一个列表视图滚动问题,我正在Android上实现列表视图,但它不能顺利滚动。我添加了一个ViewHolder模式,我试图只为行设置textview但仍然无效。而且我不认为我在UI威胁上做了很多工作,因为容器活动只有3个静态按钮。

这是我的Adapter getView函数:

public View getView(int position, View convertView, @NonNull ViewGroup parent) {

    ViewHolder holder;

    if (convertView == null) {

        // if it's not recycled, initialize some attributes
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // get layout reference
        convertView = inflater.inflate(R.layout.row_search, parent, false);

        holder = new ViewHolder();

        // Get the reference to layout
        holder.ivColorSearch = convertView.findViewById(R.id.vi_color_search);
        holder.tvColorDesc = (TextView) convertView.findViewById(R.id.tv_color_desc);
        holder.position = position;

        convertView.setTag(holder);

    } else {

        holder = (ViewHolder) convertView.getTag();
    }

    // Set colo+r description
    holder.tvColorDesc.setText(dataSet.get(position).name + "\n" + fandeckNames.get(dataSet.get(position).fandeck));

    // Set image color
    GradientDrawable drawable = (GradientDrawable) holder.ivColorSearch.getBackground();
    int color = Color.parseColor(dataSet.get(position).colorCode);
    drawable.setColor(color);

    // Set the listener
    holder.ivColorSearch.setOnClickListener(this);
    holder.tvColorDesc.setOnClickListener(this);

    holder.ivColorSearch.setTag(position);
    holder.tvColorDesc.setTag(position);

    return convertView;
}

正如你所看到的那样,每一行只有一个View(它是一个Image视图,但我正在尝试改进它)来设置它的背景颜色和TextView。 如果我删除设置图像并设置文本代码块,它直接不滚动,我无法理解为什么。

这是我的列表视图xml声明(它在自定义视图中):

    <RelativeLayout          xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="200dp"
 android:layout_height="match_parent"
 android:layout_gravity="fill_horizontal"
 android:orientation="vertical"
 android:visibility="gone"
 android:background="@android:color/black"
 android:layout_alignParentEnd="true"
 android:layout_marginTop="50dp"
 android:layout_marginBottom="50dp">


<!-- Search field -->
<EditText
    android:id="@+id/et_search"
    android:layout_width="190dp"
    android:layout_height="50dp"
    android:hint="@string/search"
    android:inputType="textFilter"
    android:layout_marginStart="5dp"
    android:background="@drawable/rounded_corners_edittext"/>

<!-- Colors list -->
<ListView
    android:id="@+id/lv_search_colors"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:scrollbars="none"
    android:layout_marginTop="50dp"
    android:divider="@null">
</ListView>

</RelativeLayout>

这是我的行代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_language_item"
android:orientation="horizontal"
android:layout_width="200dp"
android:layout_height="50dp">

<View
    android:id="@+id/vi_color_search"
    android:layout_width="46dp"
    android:layout_height="46dp"
    android:layout_margin="2dp"
    android:background="@drawable/rounded_corners_image"/>

<TextView
    android:id="@+id/tv_color_desc"
    android:layout_width="150dp"
    android:layout_height="50dp"
    android:textColor="@android:color/white"
    android:lines="2"
    android:textAlignment="center"/>

 </LinearLayout>

在此先感谢,如果您需要更多信息,请问,我从星期六开始就遇到过这个问题,我已经测试了很多不同的解决方案,但我认为这是实现列表视图的更好方法。

1 个答案:

答案 0 :(得分:1)

已经解决了,我很抱歉,这是我的错。我正在覆盖容器活动中列表视图的触摸侦听器。

建议:不要复制粘贴jeje