我有问题......
02-20 02:57:09.854: E/AndroidRuntime(12431): Uncaught handler: thread main exiting due to uncaught exception"
...后...
02-20 02:57:09.864: E/AndroidRuntime(12431): java.lang.ClassCastException: java.util.ArrayList
...在使用SQLite填充的ListView中,listView工作正常,但稍后当我尝试使用onListItemClick时,为了获取所选列表视图中的项目参数并在其他布局中显示它,程序停止并且DDMS说这个“未捕获的处理程序:主要由于未捕获的异常而退出”后来在ListView中说“java.lang.ClassCastException:java.util.ArrayList”“也许我处理坏了我的Arraylist适配器?
这是我的主要课程:
public class lay_main extends ListActivity
{
public ListView list;
public DBHelper myAdap;
protected SQLiteDatabase db;
public Cursor cursor;
DBHelper Context;
DBHelper ArrayList;
//adapter cAdapter class
protected ListAdapter adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lay_main);
collectXML();
setupDataBase();
setupAdapter();
}
private void collectXML()
{
list = (ListView)findViewById(android.R.id.list);
}
public void setupDataBase() {
myAdap = new DBHelper(getApplicationContext());
myAdap.insertCourses();
}
public void setupAdapter()
{
if(myAdap.getCourses()!=null)
{
cAdapter adapter = new cAdapter(this, R.layout.list_courses, myAdap.getCourses());
list.setAdapter(adapter);
}
}
public void onListItemClick(ListView parent, View view, int position, long id)
{
super.onListItemClick(parent, view, position, id);
Intent intent = new Intent(this, CourseDetails.class);
Cursor cursor = (Cursor) myAdap.getItem(position);
intent.putExtra("COURSE_ID", cursor.getInt(cursor.getColumnIndex("title")));
startActivity(intent);
}
}
我的课程CourseDetails用于接收和显示数据:
public class CourseDetails<BDHelper> extends Activity {
protected TextView tTitle;
protected TextView tInstructor;
protected TextView tLength;
protected TextView tRating;
protected TextView tTopic;
protected TextView tSubject;
protected TextView tDescription;
protected int courseId;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.course_details);
courseId = getIntent().getIntExtra("COURSE_ID", 0);
SQLiteDatabase db = (new DBHelper(this)).getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT title, instructor, length, rating, topic, subject, description FROM courses",
new String[]{"" + courseId});
if (cursor.getCount() == 1)
{
cursor.moveToFirst();
tTitle = (TextView) findViewById(R.id.tTitle);
tTitle.setText(cursor.getString(cursor.getColumnIndex("title")));
tInstructor = (TextView) findViewById(R.id.tInstructor);
tInstructor.setText(cursor.getString(cursor.getColumnIndex("instructor")));
tLength = (TextView) findViewById(R.id.tLength);
tLength.setText(cursor.getString(cursor.getColumnIndex("length")));
tRating = (TextView) findViewById(R.id.tRating);
tRating.setText(cursor.getString(cursor.getColumnIndex("rating")));
tTopic = (TextView) findViewById(R.id.tTopic);
tTopic.setText(cursor.getString(cursor.getColumnIndex("topic")));
tSubject = (TextView) findViewById(R.id.tSubject);
tSubject.setText(cursor.getString(cursor.getColumnIndex("subject")));
tDescription = (TextView) findViewById(R.id.tDescription);
tDescription.setText(cursor.getString(cursor.getColumnIndex("description")));
}
}}
我的适配器类:
public class cAdapter extends ArrayAdapter {
Context context;
ArrayList<Courses> courses;
@SuppressWarnings("unchecked")
public cAdapter(Context context, int layout_id, ArrayList<Courses> Courses) {
super(context, layout_id, Courses);
this.context=context;
this.courses=Courses;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_courses, null);
try{
//components
TextView txt_title=(TextView)row.findViewById(R.id.txt_title);
TextView txt_instructor=(TextView)row.findViewById(R.id.txt_instructor);
TextView txt_length=(TextView)row.findViewById(R.id.txt_length);
TextView txt_rating=(TextView)row.findViewById(R.id.txt_rating);
TextView txt_topic=(TextView)row.findViewById(R.id.txt_topic);
//asign values
txt_title.setText(courses.get(position).title);
txt_instructor.setText(courses.get(position).instructor);
txt_length.setText(courses.get(position).length);
txt_rating.setText(courses.get(position).rating);
txt_topic.setText(courses.get(position).topic);
}catch(Exception ex){}
return row;
}
}
不是我做错了,真的很感激你的帮助。
答案 0 :(得分:1)
覆盖适配器的getItem方法并从getItem返回Cources对象,
Override
public Courses getItem(int position)
{
return courses.get(positon);
}
并在SetupAdapter方法中:
public void setupAdapter()
{
if(myAdap.getCourses()!=null)
{
adapter = new cAdapter(this, R.layout.list_courses, myAdap.getCourses());
list.setAdapter(adapter);
}
}
并更改itemClick,如下所示:
public void onListItemClick(ListView parent, View view, int position, long id)
{
super.onListItemClick(parent, view, position, id);
Intent intent = new Intent(this, CourseDetails.class);
Courses course= (Courses) adapter.getItem(position);
intent.putExtra("COURSE_ID", course.title));
startActivity(intent);
}