Android Custom ListView Rows:未应用文本样式

时间:2014-01-25 02:06:38

标签: android listview android-listview xamarin

尝试在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);
        }
    }

对不起所有代码,也许它将来会帮助某人...感谢您的帮助。

3 个答案:

答案 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中的所有格式都消失了。谁知道......也许正在使用缓存版本或其他东西。我实际上不得不使用此页面上发布的代码来使其工作(因为它丢失了),所以也许有人可以使用它作为示例代码。它有效。