【问题标题】:reuse the inflated view in android在android中重用膨胀的视图
【发布时间】:2013-05-22 10:55:58
【问题描述】:

以下代码将同一视图膨胀 20 次。因为膨胀是昂贵的。我只想给它充气一个,并为 20 个项目使用相同的视图,我只想更改 UI 中的可见数据。

LinearLayout ll = new LinearLayout(context); 
for (int i = 0; i < 20; ++i) {
    View itemView = inflater.inflate(getLayoutId(), parent, false);
    itemView.setText(data.getName(i);
    ll.add(itemView);
}

我想要这样的东西。

LinearLayout ll = new LinearLayout(context); 
View itemView = inflater.inflate(getLayoutId(), parent, false);
for (int i = 0; i < 20; ++i) {
    itemView.setText(data.getName(i);
    ll.add(itemView);
}

但我无法以这种方式使用 itemView obj。

谁能告诉我如何在视图膨胀后多次使用它。

【问题讨论】:

  • 如果您的布局中只有一个 textView,那么您可以通过编程方式创建 textView
  • 您正在从同一个 xml 创建 20 个不同的视图。如果您需要 20 个视图,则不能少于 20 个视图。
  • textview 我举了一个例子,我还有几个视图。

标签: android android-layout


【解决方案1】:

你不能那样做。如果您认为它的成本很高,请找到另一种创建布局的方法。

但以 gridViews 为例。他们创造了大量的观点并展示出来,效果很好。

您不能将视图的同一个对象两次添加到布局中。每个对象都有自己的状态,在您的情况下,这意味着您将在所有 20 个视图之间共享状态,这是没有意义的,这意味着更改一个 textView 上的文本将更改其余所有视图上的文本。 .

只需膨胀 20 个单独的视图并适当地填充它们。

如果您实际上拥有完全相同的视图,也可以考虑使用 ListView 或 GridView,它可以提供一些不错的功能,例如视图回收。

【讨论】:

    【解决方案2】:

    你应该使用 ViewHolder 模式:

    http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder

    它应该做你想做的所有事情

    【讨论】:

    • 我想将这 20 个视图添加到水平滚动视图。列表视图有适配器,它将提供可重用的转换视图。水平滚动视图是否也有任何适配器可以提供数据。?
    • Viewholder 不会克隆视图。在添加到布局之前编写代码以克隆视图
    • viewholder 只是一种与 ListView 一起工作的模式,原始问题暗示 ListView 不是一个选项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    相关资源
    最近更新 更多