Android自定义ListView行:未应用文本样式
正在尝试在我的listview中创建自定义行(看起来像)。我已经创建了一个自定义行布局和派生适配器类。数据加载和显示良好,但文本未使用自定义row.xml布局文件中指定的任何格式/样式。这只是默认的尺寸/重量等 这是自定义行布局(listview_desc.xml)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
这是我的主要布局文件:
<?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);
}
}