Java 我的代码中没有显示基于自定义BaseAdapter的Android ListView
我正在使用一个定制的BaseAdapter处理ListView,我在这里的Slidenerd教程系列中已经看过了:(观看了解我的问题并不重要)Java 我的代码中没有显示基于自定义BaseAdapter的Android ListView,java,android,listview,baseadapter,Java,Android,Listview,Baseadapter,我正在使用一个定制的BaseAdapter处理ListView,我在这里的Slidenerd教程系列中已经看过了:(观看了解我的问题并不重要) 在虚拟设备上运行代码后,没有错误,但ListView也没有。 能告诉我我的代码有什么问题吗 public class List extends Activity { ListView lv; @Override protected void onCreate(Bundle savedInstanceState) {
在虚拟设备上运行代码后,没有错误,但ListView也没有。 能告诉我我的代码有什么问题吗
public class List extends Activity {
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
lv = (ListView) findViewById(R.id.listView);
lv.setAdapter(new EhsanAdapter(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.list, menu);
return true;
}
}
class SingleRow{
String title;
String description;
int image;
public SingleRow(String title,String description,int image) {
this.title = title;
this.description=description;
this.image=image;
}
}
class EhsanAdapter extends BaseAdapter{
ArrayList<SingleRow> list;
Context context;
public EhsanAdapter(Context c) {
list = new ArrayList<SingleRow>();
context = c;
Resources res = c.getResources();
String[] titles = res.getStringArray(R.array.titles);
String[] descriptions = res.getStringArray(R.array.descriptions);
int[] images = {R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5};
for(int i=0;i<10;i++){
list.add(new SingleRow(titles[i], descriptions[i], images[i]));
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.single_row, viewGroup,false);
TextView title = (TextView) row.findViewById(R.id.txtTitle);
TextView description = (TextView) row.findViewById(R.id.txtDescription);
ImageView image = (ImageView) row.findViewById(R.id.imgPic);
SingleRow temp = list.get(i);
title.setText(temp.title);
description.setText(temp.description);
image.setImageResource(temp.image);
return row;
}
}
公共类列表扩展活动{
ListView lv;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_列表);
lv=(ListView)findViewById(R.id.ListView);
lv.setAdapter(新EhsanAdapter(本));
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.list,menu);
返回true;
}
}
类单列{
字符串标题;
字符串描述;
int图像;
公共单行(字符串标题、字符串描述、整型图像){
this.title=标题;
这个。描述=描述;
这个。图像=图像;
}
}
类EhsanAdapter扩展了BaseAdapter{
数组列表;
语境;
公共适配器(上下文c){
列表=新的ArrayList();
上下文=c;
Resources res=c.getResources();
String[]titles=res.getStringArray(R.array.titles);
String[]descriptions=res.getStringArray(R.array.descriptions);
int[]images={R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5};
对于(int i=0;i从getView()方法中删除行LayoutInflater-inflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u-inflater\u-SERVICE);
并将其添加到EhsanAdapter
类的构造函数中。我看到了不同的问题:
单行布局包含一个相对布局,android:layout\u height=“match\u parent”
应该是android:layout\u height=“wrap\u content”
然后,在适配器内部,您既不循环使用视图,也不使用ViewHolder模式:
你只有5张图片,你写的代码看起来很好。它在真正的设备上工作吗?可以发布布局xml吗?@LiorOhana Yea我认为代码很好,我在avd上运行了这个。布局现在在那里。不工作!我认为代码的顺序在某种程度上是正确的,可能有一点错误。
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".List" >
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:layout_margin="10dp"
android:id="@+id/imgPic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/image1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Title"
android:id="@+id/txtTitle"
android:layout_alignTop="@+id/imgPic"
android:layout_toRightOf="@+id/imgPic"
android:layout_alignParentRight="true">
</TextView>
<TextView
android:id="@+id/txtDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/imgPic"
android:layout_marginLeft="25dp"
android:layout_toRightOf="@+id/imgPic"
android:layout_marginTop="20dp"
android:text="Description"
android:ems="10">
</TextView>
</RelativeLayout>
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null){ //The row view is not created, let's do it:
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.single_row, viewGroup,false);
TextView title = (TextView) row.findViewById(R.id.txtTitle);
TextView description = (TextView) row.findViewById(R.id.txtDescription);
ImageView image = (ImageView) row.findViewById(R.id.imgPic);
// Here we add the title, description and image inside the ViewHolder
....
}else{
//With the View holder pattern we get the views inside the row view to fill it later
....
}
// Now we get the SingleRow and we fill it using the ViewHolder pattern
SingleRow temp = list.get(i);
....
return row;
}
for(int i=0;i<5;i++){
list.add(new SingleRow(titles[i], descriptions[i], images[i]));
}