【问题标题】:Android views managementAndroid 视图管理
【发布时间】:2013-04-02 13:22:03
【问题描述】:

我目前正在编写一个 android 应用程序,我希望它编写/设计得很好。

现在,我在相对布局中有一组多个视图(2 个图像视图,3 个文本视图),我经常使用这些视图。有没有办法创建一个自定义视图来重新组合它们?

我截取了这张截图来解释我现在所做的事情:

如您所见,现在我刚刚复制/粘贴了包含我所有视图的框架布局...这是正确的方法还是有更清洁的解决方案?

谢谢大家

【问题讨论】:

标签: android xml layout view


【解决方案1】:

没有更好的方法是将您放入布局中的所有内容放入ArrayList 对象中。 然后创建一个ArrayAdapter 以按照你想要的方式从这个对象中填充一个ListView

此技术的优点是您获得了一种视图回收机制,该机制将回收您内部的Views ListView 以减少内存消耗。

简而言之,您必须:

1.创建一个代表单行数据的对象。

2.为这些对象创建一个ArrayList

3. 创建一个包含 ListView 的布局或使用代码将 ListView 添加到您的主布局中。

4.创建单行布局(您已经拥有它)。

5.创建一个ViewHolder,它将从Views 的角度代表您的数据行的视觉方面。

6.创建一个自定义ArrayAdapter,它将根据您的需要填充行。

7. 最后将此ArrayAdapter 分配给onCreate 中的ListView

您可以通过阅读我写的这篇博文了解如何实现这一点:

Create a Custom ArrayAdapter

【讨论】:

  • 感谢 Emil 的回答!它完全代表了我想做的事情。一个问题认为,我对您的代码有了大致的了解。但是在第一步中,您建议我创建一个对象(我想是 RowData),其中包含我的行的“数据”。确切地说,在我的情况下......这个数据是什么?我的文本字符串和我的图像路径源?如果我做对了,我应该创建一个构造函数,为每个对象放置正确的字符串/图像路径(代表不同的行?)
  • 您的 RowData 对象正是您认为的那样。与您要在一行中显示的内容相关的所有数据。在大多数情况下,它将是字符串、整数和 FilePath 或用于图像的 Url,但如果您想为每行指定颜色并在 ArrayAdapter 中动态使用它,它甚至可以是 Color 对象,它甚至可以是其他项目的 ArrayList当您单击该行时,它将显示在另一个列表中。
  • 我明白了,谢谢!最后一个问题,当你的最后一句话让我注意到另一个问题时......当我点击该行时,它会通过 fragmentManager 推送一个新的 xml 布局(那个 xml 布局总是具有与 6 个文本视图相同的表单)......我想我做到了两次相同的错误(我用这 6 个文本视图复制/粘贴了我的 xml 布局,并使用字符串引用直接在 XML 中更改了它们的包含)......布局包含在这里没有以编程方式编码!我想我将不得不创建一个新对象的另一个数组列表,它将包含我的这 6 个文本视图,对吧?感谢您的宝贵时间,非常感谢!
  • 我无法掌握您描述的布局,您介意显示屏幕截图吗?
  • img42.imageshack.us/img42/5625/stackk.png,那里!尽我所能说清楚!编辑:我很确定我只能做一个布局并通过代码分配不同的内容!就像你在我的列表视图中告诉我的那样!
【解决方案2】:

如果您在代码中而不是界面构建器中执行此操作,您可以使用LayoutInflator 每次从您的 xml 创建一个视图,然后将这些视图作为子视图添加到您的 LinearLayout。这还允许您更改数量,而无需复制粘贴每个新视图。

LayoutInflater layoutInflator = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout ll = (LinearLayout) findViewById(R.id.yourLayout);
for(int i=0; i<numOfSubViews; i++){
    View view = layoutInflator.inflate(R.layout.yourFrameLayout, null);
    ll.add(view);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2020-03-06
    • 2012-03-02
    相关资源
    最近更新 更多