我想使用自定义列表视图显示我的arraylist结果。
现在我正在使用android布局显示我的结果。
setListAdapter(new StudentListAdapter(this,android.R.layout.simple_list_item_1, results));
我有两个要显示的字段
文件位于:ERROR/AndroidRuntime(335): Caused by: java.lang.NullPointerException
答案 0 :(得分:1)
由于您正在使用自定义列表适配器并且已覆盖getView
方法,因此我认为以下行:
setListAdapter(new StudentListAdapter(this,android.R.layout.simple_list_item_1, results));
应该是:
setListAdapter(new StudentListAdapter(this, results));
答案 1 :(得分:0)
请参阅具有多个视图的ListView的API演示。
答案 2 :(得分:0)
最终,您将需要覆盖正在使用的适配器类的getView()方法。只需快速谷歌搜索就可以找到很多例子。
这里有一些非常基本的东西:http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications
这是一个更复杂的问题:http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/
答案 3 :(得分:0)
试试这段代码
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class FindPlaces extends Activity{
private SQLiteDatabase DbLoc;
ListView lv;
private ArrayList<Fields> results = new ArrayList<Fields>();
@Override
public void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);
setContentView(R.layout.places);
getallLocs();
displayLocs();
}
private void displayLocs() {
lv = (ListView)findViewById(R.id.listPlaces);
lv.setAdapter(new StudentListAdapter(this,results));
}
class StudentListAdapter extends BaseAdapter<Fields>{
private ArrayList<Fields> locationDetails;
private Context mContext;
public StudentListAdapter(Context context, ArrayList<Fields> results) {
// TODO Auto-generated constructor stub
System.out.println("Constructor StudentList Adapter...");
this.locationDetails = results;
this.mContext = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return locationDetails.size();
}
@Override
public Fields getItem(int position) {
// TODO Auto-generated method stub
return locationDetails.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return super.getItemId(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
if(v == null){
LayoutInflater vl = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vl.inflate(R.layout.placeslist, null);
}
Fields o = locationDetails.get(position);
if (o != null) {
TextView iv = (TextView)v.findViewById(R.id.toptext);
TextView tv_sNo = (TextView)v.findViewById(R.id.toptext1);
iv.setText(o.getLocationName());
tv_sNo.setText(o.getLocationImage());
}
return v;
}
}
static class ViewHolder
{
TextView Locationname;
ImageView Locationimage;
}
private void getallLocs() {
// TODO Auto-generated method stub
try {
DatabaseHelper dbHelper = new DatabaseHelper(
this.getApplicationContext());
DbLoc = dbHelper.getWritableDatabase();
Cursor c = DbLoc.rawQuery("SELECT " + DatabaseHelper.LocationName+ " , " + DatabaseHelper.LocationImage + " FROM "
+ DatabaseHelper.LOCATIONTABLE , null);
if (c != null) {
if (c.moveToFirst()) {
do {
String LocationName= c.getString(c.getColumnIndex("LocationName"));
String Mobile = c.getString(c
.getColumnIndex("LocationImage"));
Fields p = new Fields(LocationName, Mobile);
results.add(p);
} while (c.moveToNext());
}
}
} catch (SQLiteException se) {
Log.e(getClass().getSimpleName(),
"Could not create or Open the database");
}
finally { if (DbLoc != null) DbLoc.execSQL("DELETE FROM " +
DatabaseHelper.FRIENDTABLE); DbLoc.execSQL("DELETE FROM " +
DatabaseHelper.LOCATIONTABLE);
DbLoc.execSQL("DROP TABLE IF EXISTS tablename"+ DatabaseHelper.FRIENDTABLE);
DbLoc.execSQL("DROP TABLE IF EXISTS tablename"+ DatabaseHelper.LOCATIONTABLE);
DbLoc.close();
}
}
}