2011-09-01 79 views
1

我一直在学习和构建一个从头开始的Android应用程序,我碰到了一堵墙。 我在android开发者页面上阅读了关于可定制的UI组件,并认为我可以在应用程序中使用这些来包含聊天页面的消息。Android:使用我自己的自定义布局填充滚动视图

我已经做了XML文件,但我不知道如何从我的代码调用这些布局文件。 目前我从一个数组中读取消息,然后通过一个循环制作一个TextView,并通过代码为它设置必要的属性,然后将它添加到scrollView中的RelativeLayout中。这一切都正常,但我希望我的消息显示更多信息(例如时间和收件人是否已收到/阅读它),这是新的XML文件进来的地方,它们已经设置了字段和布局,所以我我想我可以调用这些,设置一些变量,并完成它。

正如我之前所说的,问题是我不知道如何引用我的代码中的布局文件。我已经阅读了关于构建自己的用户界面元素的Android开发者页面上的所有文章,并且我也搜索了我的公平份额,但显然我是唯一一个想过这样做的人,或者我可以找不到合适的关键字。所以现在我问你们。感谢您提供给我的任何答案。

编辑: 我一直在做一些研究,我想我需要做的就是写我自己的适配器与我自己的类的消息以及这些消息我自己的XML布局工作。不过,我不知道从哪里开始,因为我找不到有关如何编写自己的适配器的任何好文档。

+0

我需要澄清。我认为以下基本上是你想要做的:在你的ScrollView中添加newMessage到relativeLayout,然后在newMessage下面添加timeAndDateLayout.xml,然后能够在timeAndDateLayout.xml下添加newMessage2,然后再添加timeAndDateLayout.xml(with不同的值)低于newMessage2 这基本上是你想要的? – Jakar

+0

排序,是的。我创建了一个XML文件,其中包含2个TextView,一个用于时间/日期,另一个用于消息。当我收到新消息(或加载它们时),我希望能够使用XML文件将它们添加到我的滚动视图中。 – Lars

+0

您可以将您的解决方案作为答案发布,然后接受它,因为我的答案实际上不是解决方案,并且对于那些需要这些信息的人来说它更明显。也就是说,如果你在乎足够的麻烦。 – Jakar

回答

0

对于那些有兴趣我是如何做到了(如果你在同样的问题自己运行):
对于每一个名单,我想用我自己的随机组数据来创建创建我自己的适配器延伸BaseAdapter 。通过简单地覆盖getView方法,可以膨胀并填充列表项的不同部分。
我使用this教程来帮助我创建自己的适配器。

0

你可以做以下,但将创建一个新的TextView不理你有什么布局:

ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView); 
TextView textView = new TextView(this); 
textView.setText(message); 
scrollView.addView(textView); 
textView.setText(timeAndDate); 
scrollView.addView(textView); 

我从来没有亲自使用滚动型,所以我没有对上述功能确保100% ,但它与我的经验与LinearLayout和RelativeLayout相匹配。

或者,因为你有你的customr布局已,你会怎么做:

ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView); 
TextView textView = (TextView)findViewById(R.id.textView); 
textView.setText(messageTimeDate); 
scrollView.addView(textView); 

这是本质,你可以如何处理它。我不是100%确定是否可以在两种实现中多次添加textView。如果抛出一个异常,你可以使用的文本视图,如数组列表:

ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView); 
ArrayList<TextView> textView = new ArrayList<TextView>(); 
textView.add((TextView)findViewById(R.id.textView)); 
textView.get(index).setText(messageTimeDate); 
scrollView.addView(textView.get(index).getId()); 

无论我提出的TextView的ID,你可以使用邮件或TIMEDATE,和你两个人我引用的每个东西,然后。

+1

感谢您的回复,但这不是我真正想要的。 我已经找到了另一个如何做到这一点,虽然我现在使用一个适配器,并指定一个ViewBinder来指定哪些数据在哪些字段。 感谢您的帮助。 – Lars

+0

没问题。我从来没有使用ViewBind或适配器,但我相信这将是一个更简单的方法。很高兴你找到了解决方案。 – Jakar

+1

对于那些对我如何做的感兴趣的人(如果你自己也遇到同样的问题):对于我想用我自己的随机数据集创建的每个列表,我创建了自己的适配器,它扩展了BaseAdapter。通过简单地覆盖getView方法,可以膨胀并填充列表项的不同部分。 我使用[this](http://www.nofluffjuststuff.com/blog/vladimir_vivien/2011/09/creating_android_view_adapters_is_easy_but_beware_)教程来帮助我创建自己的适配器 – Lars