【问题标题】:Forcing layout to refresh after adding each view添加每个视图后强制刷新布局
【发布时间】:2014-03-06 18:32:17
【问题描述】:

我是 android 新手,我想将一长串 textViews 添加到 LinearLayout(大约 200 个 textviews)。

如您所知,将大视图添加到布局会导致 Activity 冻结,直到添加所有文本视图。我想在每个 addview 之后刷新布局并显示添加到布局中的新 textview。我已经测试了我想到的所有内容,并在整个网络上搜索了答案,我知道我必须使用线程,但没有一个线程对我有用。

我使用过 ListView,但它太慢了,因为它需要让这么多控件在它们看不见时不可见。

如何在每次查看后强制刷新?

编辑:
这是被膨胀了大约 100 次的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:pixlui="http://schemas.android.com/apk/com.neopixl.pixlui"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp" >

<com.neopixl.pixlui.components.textview.TextView
    android:id="@+id/itemTitle1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:text=""
    android:textColor="#58595b"
    android:textSize="@dimen/details_title_font_size"
    pixlui:typeface="font.ttf" />

<JustifiedTextView
    android:id="@+id/itemText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text=""
    android:textColor="#58595b"
    android:textSize="@dimen/details_font_size"
    android:lineSpacingMultiplier="2"/>
</LinearLayout>

这是我BaseAdaptergetView方法:

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

    if (convertView == null) {


        convertView = mInflater.inflate(R.layout.rowitemview, null);
        holder = new ViewHolder();
        holder.title1 = (TextView) ((LinearLayout)convertView).getChildAt(0);
        holder.text1 = (JustifiedTextView)  ((LinearLayout)convertView).getChildAt(1);
        holder.text1.SetTextAlign(Align.RIGHT);
        holder.text1.setTypeface(font);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.title1.setText(getItem(position).getTitle()); 
    holder.text1.setText(getItem(position).getDesc());

    return convertView;
}

这个ListView 的问题是它在向上或向下滚动时非常滞后。我什至尝试过延迟加载项目,但也没有用。

【问题讨论】:

  • 添加您尝试过的代码。
  • 正如 NameSpace 所说,如果您有这么多视图,您应该使用 ListView。当您尝试制作 ListView 时,您必须控制什么并且很难?也许我们可以帮助你。
  • 我编辑了我的问题,并为ListView添加了一些代码

标签: android


【解决方案1】:

您确实需要重构代码以不添加 200 个文本视图。

你可以做的是用一个 listView 替换这 200 个文本视图。这会动态添加和回收子视图。因此,即使您有 200 个条目,应用程序也只会占用需要在屏幕上绘制的内容。

查看列表视图tutorial

【讨论】:

  • 我编辑了我的问题,并为ListView添加了一些代码
  • 我明白了...“我使用了 ListView,但它太慢了,因为它需要让这么多控件在它们看不见时不可见。”这不是 listViews 做的,你看不到的 Views 实际上不存在,它们被回收,并写在上面。
  • 感谢您的信息...但它仍然不能解决我的问题... ListView 仍然非常滞后,另一方面 ScrollView 非常流畅,但需要大约 5 秒我的 nexus 7 添加所有文本视图...如果有一种方法可以在后台线程中将视图添加到布局中,用户不必等到所有控件都加载完毕会很棒...
  • 不幸的是,我看不出有什么落后于你......一般来说,列表视图不受数据大小的直接影响,因为它们只是关于数据片段的视图- 我用它们来显示包含 1000 项项目的数据库。我注意到您正在使用自定义 textViews...当您滚动时,很难说出其中的代码在做什么(如果有的话)。
  • 所有文本视图都必须加载到 UI 线程上(我相信),所以我看不到后台线程有帮助。背景线程通常用于从文件加载图像(例如),然后将该图像设置为 UI 线程上的 imageView。在这里,我看不到您可以排除什么...上面的代码确实没有显示落后于您的内容。
猜你喜欢
  • 2011-08-24
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 2014-11-13
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多