Java 自定义适配器赢得';t在列表视图中膨胀行
我已经创建了一个自定义listview和一个自定义适配器。但是,当我显示活动时,它显示为空(尽管我确保了数组中有人传递给适配器) 1) 为什么不显示人员列表?getView或onCreate函数中是否有错误 2) 如何创建一个被另一个视图包围的列表视图(顶部列表底部的搜索栏) 下面是adapters getView函数:Java 自定义适配器赢得';t在列表视图中膨胀行,java,android,listview,Java,Android,Listview,我已经创建了一个自定义listview和一个自定义适配器。但是,当我显示活动时,它显示为空(尽管我确保了数组中有人传递给适配器) 1) 为什么不显示人员列表?getView或onCreate函数中是否有错误 2) 如何创建一个被另一个视图包围的列表视图(顶部列表底部的搜索栏) 下面是adapters getView函数: @Override public View getView(int postion, View convertView, ViewGroup parent) { Vie
@Override
public View getView(int postion, View convertView, ViewGroup parent)
{
View rowView = convertView;
if (rowView == null)//set the convert view and the viewholder
{
LayoutInflater inflater = _context.getLayoutInflater();
rowView = inflater.inflate(_layoutResourceId, null,false);
ViewHolder viewHolder = new ViewHolder();
viewHolder._personName = (LargeTest) rowView.findViewById(R.id.personName);
viewHolder._personBirthDate = (TextView) rowView.findViewById(R.id.personBirthDate);
viewHolder._icon = (ImageView) rowView.findViewById(R.id.personPic);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
Person person=_persons.get(postion);//get current person for the list row
String personName = person.get_firstName()+" "+person.get_lastName();
((TextView) holder._personName).setText(personName);
String birthDate=person.get_birthDate()+";"+person.get_hebBirthDate();
holder._personBirthDate.setText(birthDate);
//TODO change icon to a real image for each Person
holder._icon.setImageResource(R.drawable.about_me);//test icon
return rowView;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//TODO remove the test case
//addTestPersons();//add a test case
//setContentView(R.layout.person_list_activity);
PersonDbHelper dbHelper=new PersonDbHelper(this);
ArrayList<Person> persons =dbHelper.getAllPeopleAsPersonList();//get list to display
PersonListAdapter adapter=new PersonListAdapter(this, R.layout.person_list_row, persons);
setListAdapter(adapter);
}
以下是listview onCreate函数:
@Override
public View getView(int postion, View convertView, ViewGroup parent)
{
View rowView = convertView;
if (rowView == null)//set the convert view and the viewholder
{
LayoutInflater inflater = _context.getLayoutInflater();
rowView = inflater.inflate(_layoutResourceId, null,false);
ViewHolder viewHolder = new ViewHolder();
viewHolder._personName = (LargeTest) rowView.findViewById(R.id.personName);
viewHolder._personBirthDate = (TextView) rowView.findViewById(R.id.personBirthDate);
viewHolder._icon = (ImageView) rowView.findViewById(R.id.personPic);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
Person person=_persons.get(postion);//get current person for the list row
String personName = person.get_firstName()+" "+person.get_lastName();
((TextView) holder._personName).setText(personName);
String birthDate=person.get_birthDate()+";"+person.get_hebBirthDate();
holder._personBirthDate.setText(birthDate);
//TODO change icon to a real image for each Person
holder._icon.setImageResource(R.drawable.about_me);//test icon
return rowView;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//TODO remove the test case
//addTestPersons();//add a test case
//setContentView(R.layout.person_list_activity);
PersonDbHelper dbHelper=new PersonDbHelper(this);
ArrayList<Person> persons =dbHelper.getAllPeopleAsPersonList();//get list to display
PersonListAdapter adapter=new PersonListAdapter(this, R.layout.person_list_row, persons);
setListAdapter(adapter);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//TODO删除测试用例
//addTestPersons();//添加测试用例
//setContentView(R.layout.person\u list\u活动);
PersonDbHelper dbHelper=新的PersonDbHelper(此);
ArrayList persons=dbHelper.GetAllPeoplePersonList();//获取要显示的列表
PersonListAdapter=新PersonListAdapter(此,R.layout.person\u列表行,persons);
setListAdapter(适配器);
}
以及列表行的XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/personPic"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/about_me" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/personName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Person Name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/personBirthDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1990-2001" />
</LinearLayout>
</LinearLayout>
在适配器中实现
getCount
方法:
public int getCount(){
return _persons.size();
}
对于第二部分,添加headerview,为要显示在listview顶部的视图创建XML布局。将其充气并将其作为headerview添加到listview:
LayoutInflater inflater = this.getLayoutInflater();
View headerView = inflater.inflate(R.layout.header_view, null,false);
getListView().addHeaderView(headerView,null,false);
由于布局的命名,您正在将“R.layout.person\u list\u row”传递给适配器。我假设您正在传递适配器操作所在数组中一个项的布局,而不是传递ListView
构造函数需要传递ListView,而在其getView中,行的布局被构造(膨胀)。在何处将列表视图添加到主活动的视图我使用意向公共无效联系人通过按键启动新活动单击(视图){intent intent=new intent(这是PersonListActivity.class);startActivity(intent);}您在哪里调用具有listview小部件的setContentView,或者您是在运行时创建它的,您的getview似乎很好,建议将LinearLayout width设置为match_Parents如果您扩展ListActivity,则不需要使用setContentView所以您使用listview活动,让你重写所有其他函数,比如getCount,并确保你没有从db queryok中得到空值,而db queryok适用于列表中显示的第一部分。如何使listView成为另一个视图的一部分并在上面添加搜索栏?我假设您的意思是:listView listView=getListView();listView.addHeaderView;在onCreate?中,addHeaderView就是ListView中的方法