所以,我正在开发这个包含聊天功能的应用。我下载了一个示例,我正在尝试更改布局。但这种方式不起作用。有另一种布局称为listview适配器,我不知道它做了什么,但我认为它以某种方式与问题相关联。这是原始的LayOut(只有一个列表,一个按钮和一个edittext:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.refractored.fab.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:src="@drawable/ic_send"
android:id="@+id/fab"
android:tint="@android:color/white"
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
/>
<EditText
android:layout_toLeftOf="@+id/fab"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Your message"
android:id="@+id/input"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_above="@+id/fab"
android:divider="@android:color/transparent"
android:dividerHeight="16dp"
android:id="@+id/list_of_messages"
android:layout_marginBottom="16dp"
/>
</RelativeLayout>
这是ListView适配器:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:id="@+id/message_user"
android:textStyle="normal|bold"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/message_user"
android:layout_alignParentEnd="true"
android:id="@+id/message_time"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/message_user"
android:layout_alignParentStart="true"
android:layout_marginTop="5dp"
android:id="@+id/message_text"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textSize="18sp"
/>
</RelativeLayout>
这是LIstView的代码:
using System;
using System.Collections.Generic;
using Android.Views;
using Android.Widget;
using Java.Lang;
using Android.Content;
namespace XamarinChatApp
{
internal class ListViewAdapter : BaseAdapter
{
private List<MessageContent> lstMessage;
private MainActivity mainActivity;
public ListViewAdapter(MainActivity mainActivity, List<MessageContent> lstMessage)
{
this.mainActivity = mainActivity;
this.lstMessage = lstMessage;
}
public override int Count
{
get
{
return lstMessage.Count;
}
}
public override Java.Lang.Object GetItem(int position)
{
return position;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater)mainActivity.BaseContext.GetSystemService(Context.LayoutInflaterService);
View itemView = inflater.Inflate(Resource.Layout.List_Item, null);
TextView message_user, message_time, message_content;
message_user = itemView.FindViewById<TextView>(Resource.Id.message_user);
message_content = itemView.FindViewById<TextView>(Resource.Id.message_text);
message_time = itemView.FindViewById<TextView>(Resource.Id.message_time);
message_user.Text = lstMessage[position].Email;
message_time.Text = lstMessage[position].Time;
message_content.Text = lstMessage[position].Message;
return itemView;
}
}
}
为什么我不能改变第一个LayOut?这个ListView适配器做了什么execalty?那些相关吗?对我来说,它看起来只是格式化列表的内部。但我没有看到这种联系......
谢谢:)
答案 0 :(得分:0)
第一个布局给出了页面的整体布局。
第二种布局给出了每个项目的布局,即每条消息(用户名,消息,时间)。
现在您将所有数据传递给listview适配器,这将逐个显示每条消息。 listview适配器只会逐个膨胀第二个布局。
listview的代码是adpater的标准代码,它返回计数,位置,项目和膨胀的视图。