尝试在listview中创建自定义行(看起来像this)。我创建了一个自定义行布局&派生适配器类。数据加载并显示正常,但文本未使用我的自定义行.xml布局文件中指定的任何格式/样式。这只是默认的尺寸/重量等。
这是自定义行布局(listview_desc.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#222222">
<TextView
android:id="@+id/name"
android:text="Name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_margin="10dip"
android:textStyle="bold"
android:textSize="20dip"
/>
<TextView
android:id="@+id/description"
android:text="Description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_margin="10dip"
android:textSize="13dip" />
</LinearLayout>
这是我的主要布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:theme="@android:style/Theme.NoTitleBar"
android:minWidth="25px"
android:minHeight="25px"
android:background="@drawable/gradient_darkbg">
<ListView
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listView1" />
</LinearLayout>
我的适配器代码(我正在使用Xamarin,但我不认为这是问题...)
public class ListViewFormAdapter : BaseAdapter<Form>
{
List<Form> mForms;
Activity context;
public ListViewFormAdapter(Activity context, List<Form> items)
: base()
{
this.context = context;
this.mForms = items;
}
public override long GetItemId(int position)
{
return position;
}
public override Form this[int position]
{
get { return mForms[position]; }
}
public override int Count
{
get { return mForms.Count; }
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
var item = mForms[position];
View view = convertView;
if (view == null) // no view to re-use, create new
view = context.LayoutInflater.Inflate(Resource.Layout.listview_desc, null);
view.FindViewById<TextView>(Resource.Id.name).Text = item.Name;
view.FindViewById<TextView>(Resource.Id.description).Text = item.Description;
return view;
}
}
最后我加载并使用适配器的主要活动:
public class HomeScreenActivity : Activity
{
List<Form> mForms;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Create your application here
SetContentView (Resource.Layout.Home);
// Load all forms and populate the main menu
mForms = Utils.FormLoader.LoadForms("Forms");
ListView listView = FindViewById<ListView>(Resource.Id.listView1);
listView.Adapter = new ListViewFormAdapter(this, mForms);
}
}
对不起所有代码,也许它将来会帮助某人...感谢您的帮助。
答案 0 :(得分:1)
我不确定这是否是问题,但是您错误地夸大了视图。它应该是
view = inflater.inflate(R.layout.listview_desc, parent, false);
而不是
view = context.LayoutInflater.Inflate(Resource.Layout.listview_desc, null);
使用inflate的3参数版本
答案 1 :(得分:1)
哪些样式无法正确显示?我不确定你在期待什么,或者你从问题中看到了什么。如果是对齐,则应记住android:layout_alignParentLeft="true"
LinearLayout
无效
答案 2 :(得分:-1)
感谢响应人员。原来这是Git / Xamarin的一些问题。我在另一台机器上提交了我的源代码,回到家中,同步了,行布局xml中的所有格式都消失了。谁知道......也许正在使用缓存版本或其他东西。我实际上不得不使用此页面上发布的代码来使其工作(因为它丢失了),所以也许有人可以使用它作为示例代码。它有效。