当我想在android中制作自定义列表视图时,我遇到了问题。
MyListView类:
public class MyListView extends ArrayAdapter<Quotes> {
Context context;
int resource ;
private final List<Quotes> items;
public MyListView(Context context,int resourse , List<Quotes> items){
super(context, resourse,items);
this.resource = resourse;
this.items = items;
}
public View getView(int position, View convertView, ViewGroup parent) {
try {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}
Quotes item = items.get(position);
TextView text = (TextView) v.findViewById(R.id.listItemText);
TextView id = (TextView) v.findViewById(R.id.listItemId);
text.setText(item.getText());
id.setText(item.getID());
} catch (NullPointerException e) {
e.printStackTrace();
Log.e("Error Saeed", e.getMessage());
}
return convertView;
}
}
并在onCreate方法的MainActivity中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseHandler db = new DatabaseHandler(this);
final ListView lv = (ListView)findViewById(R.id.listView1);
MyListView adapter = new MyListView(this, R.layout.list_item, db.getAllQuotes());
lv.setAdapter(adapter);
}
DatabaseHander类
public class DatabaseHandler extends SQLiteOpenHelper {
....
....
public List<Quotes> getAllQuotes(){
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.rawQuery("select * from "+TABLE_QUOTE,null);
List<Quotes> quotes = new ArrayList<Quotes>();
if(c.moveToFirst()){
do{
Quotes q = new Quotes(Integer.parseInt(c.getString(0)),c.getString(1),c.getString(2));
quotes.add(q);
}while(c.moveToNext());
}
db.close();
c.close();
return quotes;
}
...
...
}
当我运行应用程序时,它会收到错误并关闭。
in this link you can see log.txt
问题出在哪里?
答案 0 :(得分:1)
您可能有一个NullPointerException
,因为ViewHolder
getView
convertView
时null
方法中的ViewHolder holder = null;
Quotes item = items.get(position);
if(convertView == null){
convertView = inflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView.findViewById(R.id.listItemText);
holder.txtID = (TextView)convertView.findViewById(R.id.listItemId);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
未初始化:
{{1}}
您的代码中可能存在其他问题。