Android Listview返回空
你好,我正在尝试在列表视图中构建一个水平列表的书架,但是当应用程序运行时,列表视图是空白的。 我错过了什么? 以下是我的代码(以及我用作指南的教程中的一些代码) javaAndroid Listview返回空,android,android-layout,listview,Android,Android Layout,Listview,你好,我正在尝试在列表视图中构建一个水平列表的书架,但是当应用程序运行时,列表视图是空白的。 我错过了什么? 以下是我的代码(以及我用作指南的教程中的一些代码) java public class ListBooks extends ActionBarActivity { ListView listView; private VerticalAdapter verListAdapter; @Override protected void onCreate(Bun
public class ListBooks extends ActionBarActivity {
ListView listView;
private VerticalAdapter verListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_books);
listView = (ListView)findViewById(R.id.listbooks);
BookItem book1 = new BookItem("Fist of Fury");
BookItem book2 = new BookItem("Fist of the fists");
BookItem book3 = new BookItem("Enders game");
BookItem book4 = new BookItem("Lovers");
ArrayList<BookItem> arrayList = new ArrayList<BookItem>();
arrayList.add(book1);
arrayList.add(book2);
ArrayList<BookItem> list = new ArrayList<BookItem>();
list.add(book3);
list.add(book4);
ArrayList<ArrayList<BookItem>> group = new ArrayList<ArrayList<BookItem>>();
group.add(arrayList);
group.add(list);
verListAdapter = new VerticalAdapter(this, R.layout.activity_book_list, group);
listView.setAdapter(verListAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_list_books, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private class VerticalAdapter extends ArrayAdapter<ArrayList<BookItem>> {
private int resource;
public VerticalAdapter(Context _context, int _ResourceId,
ArrayList<ArrayList<BookItem>> _items) {
super(_context, _ResourceId, _items);
this.resource = _ResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView;
if (convertView == null) {
rowView = LayoutInflater.from(getContext()).inflate(resource,
null);
} else {
rowView = convertView;
}
HorizontalListView hListView = (HorizontalListView) rowView
.findViewById(R.id.sublistview);
HorizontalAdapter horListAdapter = new HorizontalAdapter(
getContext(), R.layout.listitem, getItem(position));
hListView.setAdapter(horListAdapter);
return rowView;
}
}
private class HorizontalAdapter extends ArrayAdapter<BookItem> {
private int resource;
public HorizontalAdapter(Context _context, int _textViewResourceId,
ArrayList<BookItem> _items) {
super(_context, _textViewResourceId, _items);
this.resource = _textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View retval = LayoutInflater.from(getContext()).inflate(
this.resource, null);
TextView topText = (TextView) retval.findViewById(R.id.title);
topText.setText(getItem(position).getTitle());
return retval;
}
}
}
公共类ListBooks扩展了ActionBarActivity{
列表视图列表视图;
专用垂直适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u list\u books);
listView=(listView)findViewById(R.id.listbooks);
BookItem book1=新的BookItem(“愤怒之拳”);
BookItem book2=新的BookItem(“拳头”);
BookItem book3=新的BookItem(“Enders游戏”);
BookItem book4=新的BookItem(“恋人”);
ArrayList ArrayList=新的ArrayList();
arrayList.add(第1册);
arrayList.add(第2册);
ArrayList=新建ArrayList();
列表。添加(第3册);
列表。添加(第4册);
ArrayList组=新的ArrayList();
group.add(arrayList);
组。添加(列表);
verListAdapter=新的垂直适配器(此,R.layout.activity\u book\u list,组);
setAdapter(verListAdapter);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.menu\u list\u book,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
私有类垂直适配器扩展了ArrayAdapter{
私有int资源;
公共垂直适配器(Context\u Context,int\u ResourceId,
ArrayList(项目){
超级(\u上下文、\u资源ID、\u项目);
this.resource=\u ResourceId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行视图;
if(convertView==null){
rowView=LayoutInflater.from(getContext()).flate(资源、,
无效);
}否则{
rowView=convertView;
}
HorizontalListView hListView=(HorizontalListView)行视图
.findViewById(R.id.sublistview);
HorizontalAdapter horListAdapter=新的HorizontalAdapter(
getContext(),R.layout.listitem,getItem(位置));
hListView.setAdapter(horListAdapter);
返回行视图;
}
}
私有类HorizontalAdapter扩展了ArrayAdapter{
私有int资源;
公共水平适配器(Context\u Context,int\u textViewResourceId,
ArrayList(项目){
超级(_上下文、_文本视图资源ID、_项目);
this.resource=\u textViewResourceId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
View retval=LayoutInflater.from(getContext())。充气(
此参数为0.resource,null);
TextView topText=(TextView)retval.findViewById(R.id.title);
setText(getItem(position.getTitle());
返回返回;
}
}
}
布局文件
Listitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#fff">
<ImageView
android:id="@+id/image"
android:layout_width="150dip"
android:layout_height="150dip"
android:scaleType="centerCrop"
android:src="@drawable/wood"
/>
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000"
android:gravity="center_horizontal"
/>
</LinearLayout>
活动\u book\u list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context="com.azed">
<com.HorizontalListView
android:id="@+id/sublistview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ddd"/>
</LinearLayout>
活动\u列表\u books.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.azed">
<ListView
android:id="@+id/listbooks"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</LinearLayout>
是否检查了适配器.getCount()
返回的值是否超过0?@joao2fast4u是。它返回一个计数2。好的,但是你必须同时签入两个适配器。另外,为了测试的目的,将彩色背景应用于您的项目,以便您知道它们在那里。@joao2fast4u我已经检查了两个适配器,它们都包含数据。当我逐步浏览代码时,除了最后的列表视图是空的之外,其他一切似乎都正常。如果您有数据并且正在调用getView()
方法,请尝试在XML中的HorizontalListView
上设置一个固定高度值。