Android自定义ListView行:未应用文本样式

Android自定义ListView行:未应用文本样式,android,listview,android-listview,xamarin,Android,Listview,Android Listview,Xamarin,正在尝试在我的listview中创建自定义行(看起来像)。我已经创建了一个自定义行布局和派生适配器类。数据加载和显示良好,但文本未使用自定义row.xml布局文件中指定的任何格式/样式。这只是默认的尺寸/重量等 这是自定义行布局(listview_desc.xml) 这是我的主要布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.co

正在尝试在我的listview中创建自定义行(看起来像)。我已经创建了一个自定义行布局和派生适配器类。数据加载和显示良好,但文本未使用自定义row.xml布局文件中指定的任何格式/样式。这只是默认的尺寸/重量等

这是自定义行布局(listview_desc.xml)


这是我的主要布局文件:

<?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,但我认为这不是问题所在…)

公共类ListViewFormAdapter:BaseAdapter
{
列出表格;
活动语境;
公共ListViewFormAdapter(活动上下文、列表项)
:base()
{
this.context=上下文;
this.mForms=项目;
}
公共覆盖长GetItemId(int位置)
{
返回位置;
}
公共覆盖形式此[int位置]
{
获取{return mForms[position];}
}
公共覆盖整数计数
{
获取{return mForms.Count;}
}
公共覆盖视图GetView(int位置、视图转换视图、视图组父视图)
{
var项目=mForms[位置];
视图=转换视图;
如果(view==null)//没有要重用的视图,则创建新的
视图=context.LayoutInflater.Inflate(Resource.Layout.listview_desc,null);
view.findviewbyd(Resource.Id.name).Text=item.name;
view.findviewbyd(Resource.Id.description).Text=item.description;
返回视图;
}
}
最后是我加载和使用适配器的主要活动:

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);
        }
    }
public class HomeScreenActivity:活动
{
列出表格;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
//在此处创建应用程序
SetContentView(Resource.Layout.Home);
//加载所有表单并填充主菜单
mForms=Utils.FormLoader.LoadForms(“表单”);
ListView ListView=FindViewById(Resource.Id.listView1);
Adapter=新的ListViewFormAdapter(这是mForms);
}
}

对不起,所有的代码,也许它会帮助别人在未来。。。谢谢您的帮助。

我不确定这是否是问题所在,但您错误地夸大了视图。应该是

view=充气机。充气(R.layout.listview\u desc,父项,false)

而不是

view=context.LayoutInflater.Inflate(Resource.Layout.listview\u desc,null)


使用3参数版本的充气

哪些样式显示不正确?我不知道你在期待什么,也不知道你从这个问题中看到了什么。如果与对齐有关,请记住,
android:layout\u alignParentLeft=“true”
线性布局中无效

谢谢大家的回复。原来是Git/Xamarin的问题。我在另一台机器上提交了我的源代码,回到家,同步,行布局xml中的所有格式都消失了。谁知道。。。可能正在使用缓存版本或其他什么。实际上,我不得不使用这个页面上发布的代码来让它工作(因为它丢失了),所以也许有人可以使用这个作为示例代码。它可以工作。

只是一个警告。在某些情况下,会导致样式问题,因为适配器用于膨胀视图的上下文可能是应用程序上下文。在这种情况下,将根本不使用显式应用于活动的主题。
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);
        }
    }