基本上,我在一个循环中逐个读取来自firebase数据库的消息,之后,我想将每条消息添加到线性布局中。
我有一个名为my_linear_layout的线性布局XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/layout2"
android:layout_marginTop="20dp"
android:orientation="horizontal"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_weight="6"
android:background="@drawable/rounded_corner"
android:padding="16dp"
android:text="MESSAGE GOES HERE. IT CAN BE A LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOONG MESSAGE"
android:textColor="#000" />
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="0dp"
android:layout_weight="3"
android:src="@drawable/senduser" />
</LinearLayout>
现在,想要在我的活动的相对布局
中夸大此布局<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical"
tools:context=".BuyerChat">
<ScrollView
android:layout_width="match_parent"
android:layout_weight="20"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
</RelativeLayout>
</ScrollView>
<include
layout="@layout/type_message_area"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="bottom" />
</LinearLayout>
我不能在这里添加代码,因为我想拥有n个线性布局,具体取决于我有多少条消息。基本上,我从firebase数据库读取消息,之后,我想将每条消息添加到线性布局。
所以,我想要一个代码片段,它允许我每次调用它时添加线性布局,并且每次都以线性布局放置一条新消息。
我已经有一段时间了,请帮忙。
答案 0 :(得分:1)
你可以这样做:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical"
tools:context=".BuyerChat">
<ScrollView
android:layout_width="match_parent"
android:layout_weight="20"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/dynamic_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
</LinearLayout>
</ScrollView>
<include
layout="@layout/type_message_area"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:gravity="bottom" />
</LinearLayout>
在你的活动中:
LinearLayout dynamicHolder = (LineraLayout) findViewById(R.id.dynamic_holder);
for(int i = 0; i<your_message_length; i++){
View dynamicView = LayoutInflater.from(context).inflate(R.layout.my_linear_layout, null, false);
TextView yourTextView = (TextView) dynamicView.findViewById(R.id.your_tv_id);//give id to your textview in my_linear_layout
youtTextView.setText(your_each_message_from_db);
dynamicHolder.addView(dynamicView);
}
答案 1 :(得分:0)
为什么使用线性布局而不是listview 在这种情况下强烈建议使用ListView。
请参阅here listViews与linearLayout相比效率如何
另外它更容易使用。
ListViews不会对所有项目进行充气,但是它们会膨胀,但是一次可以将多个项目放在页面上。有或没有分页的最快选项是ListView。
请参阅此处如何开始使用listView进行聊天应用 Simple chat application using listview in android
我建议你为ListView创建自定义适配器。您只需要检查条件以更改getViews()方法中布局/视图的背景。
某些帖子可能对您有所帮助:
The World of List View
Android Implementing Chat Bubble in ListView