【问题标题】:Reset TextView position in row of Listview for Android Application为 Android 应用程序重置 Listview 行中的 TextView 位置
【发布时间】:2015-02-22 12:57:00
【问题描述】:

我正在使用 ListView 来显示一些数据。数据显示在 TextView 中。显示的字符串长度可能会有所不同。所以显示的文本视图会根据字符串的长度改变它的位置。我面临的问题是 假设有 5 行。对于第 3 行,如果文本很长,则 textview 显示文本的位置会调整以显示内容。但是,即使文本较小,其他行的 textview 位置也会发生变化。这与 ListView 行缓存有关我无法弄清楚如何重置行。

行布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="100dp">


    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="@dimen/text_margin_bottom"
        android:orientation="horizontal">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/id1"
            android:textSize="@dimen/textsize_content3" />

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/id2"
            android:textSize="@dimen/textsize_content3" />
    </LinearLayout>
     <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="@dimen/text_margin_bottom"
        android:orientation="horizontal">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/id3"
            android:textSize="@dimen/textsize_content3" />

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/id4"
            android:textSize="@dimen/textsize_content3" />
    </LinearLayout>
</LinearLayout>

获取查看代码

public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder holder;
            ShowData metaData = getItem(position);

            if (convertView == null) {
                convertView = inflater.inflate(R.layout.row, parent, false);
                holder = new ViewHolder();

                holder.id1 = (TextView) convertView
                        .findViewById(R.id.id1);
                holder.id2 = (TextView) convertView
                        .findViewById(R.id.id2);
                holder.id3 = (TextView) convertView
                        .findViewById(R.id.id3);
                holder.id3 = (TextView) convertView
                        .findViewById(R.id.id4);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            convertView.invalidate();
            holder.id1.setText(metaData.id1);
            holder.id2.setText(metaData.id2);
            holder.id3.setText(metaData.id3);
            holder.id4.setText(metaData.id4);
            return convertView;
        }

如何重置列表视图行?

【问题讨论】:

  • 您能否提供您想要达到的行的图像?
  • 您可以在设置文本后尝试在TextViews 上调用requestLayout()
  • @Mike M:谢谢你成功了。请将此作为答案发布。我会标记它

标签: android android-listview


【解决方案1】:

正如您所提到的,您的TextViews 是垂直调整大小的,因为它们的layout_heights 的wrap_content 值。似乎当Views 在ListViews(并且很可能所有AdapterViews)中被回收时,不会自动触发布局,因此TextViews 将保留其先前的高度。对它们调用requestLayout() 将触发一个布局事件,在此期间TextViews 将适应它们的新内容。

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    相关资源
    最近更新 更多