我正在嘗試使用可點擊的列表條目製作ListView
。當我點擊一個條目時,我想要做的是顯示一條Toast消息。但是,只要我點擊一個條目,應用程序就會崩潰。我真的不明白爲什麼它會這樣做。這是我的代碼:OnItemClick崩潰
package com.andriesse.android.dailyproductivity;
import java.util.ArrayList;
import com.andriesse.android.dailyproductivity.MyDB;
public class Main extends Activity implements OnItemClickListener, OnKeyListener {
ListView listview;
MyDB mydb;
TaskAdapter myadapter;
private class MyTask {
public MyTask(String t) {
task = t;
}
public String task;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
listview = (ListView) findViewById(R.id.listview);
listview.setOnItemClickListener(this);
mydb = new MyDB(this);
mydb.open();
myadapter = new TaskAdapter(this);
listview.setAdapter(myadapter);
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = ((TextView)view).getText().toString();
Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
}
private class TaskAdapter extends BaseAdapter {
private LayoutInflater layoutinflater;
private ArrayList<MyTask> arraylist;
public TaskAdapter(Context context) {
layoutinflater = LayoutInflater.from(context);
arraylist = new ArrayList<MyTask>();
getdata();
}
public void getdata() {
Cursor c = mydb.getTasks();
startManagingCursor(c);
if (c.moveToFirst()) {
do {
String task = c.getString(c
.getColumnIndex(Constants.TASK_NAME));
MyTask temp = new MyTask(task);
arraylist.add(temp);
} while (c.moveToNext());
}
}
public int getCount() {
return arraylist.size();
}
public MyTask getItem(int i) {
return arraylist.get(i);
}
public long getItemId(int i) {
return i;
}
public View getView(int i, View view, ViewGroup group) {
ViewHolder holder;
if (view == null || view.getTag() == null) {
view = layoutinflater.inflate(R.layout.rowlayout, null);
holder = new ViewHolder();
holder.textview = (TextView) view.findViewById(R.id.textview);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.mytask = getItem(i);
holder.textview.setText(holder.mytask.task);
return view;
}
public class ViewHolder {
MyTask mytask;
TextView textview;
}
}
private void addItem(String item) {
if (item.length() > 0) {
try {
saveTaskToDB(item);
myadapter.arraylist.add(new MyTask(item));
myadapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void saveTaskToDB(String task) {
mydb.insertTask(task);
}
@Override
public void onDestroy() {
super.onDestroy();
mydb.close();
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return false;
}
}
而且這裏是我的logcat日誌:
06-09 20:50:41.743: E/AndroidRuntime(194): Uncaught handler: thread main exiting due to uncaught exception
06-09 20:50:41.773: E/AndroidRuntime(194): java.lang.ClassCastException: android.widget.RelativeLayout
06-09 20:50:41.773: E/AndroidRuntime(194): at com.andriesse.android.dailyproductivity.Main.onItemClick(Main.java:57)
06-09 20:50:41.773: E/AndroidRuntime(194): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
06-09 20:50:41.773: E/AndroidRuntime(194): at android.widget.ListView.performItemClick(ListView.java:3285
06-09 20:50:41.773: E/AndroidRuntime(194): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)
06-09 20:50:41.773: E/AndroidRuntime(194): at android.os.Handler.handleCallback(Handler.java:587)
06-09 20:50:41.773: E/AndroidRuntime(194): at android.os.Handler.dispatchMessage(Handler.java:92)
06-09 20:50:41.773: E/AndroidRuntime(194): at android.os.Looper.loop(Looper.java:123)
06-09 20:50:41.773: E/AndroidRuntime(194): at android.app.ActivityThread.main(ActivityThread.java:4363)
06-09 20:50:41.773: E/AndroidRuntime(194): at java.lang.reflect.Method.invokeNative(Native Method)
06-09 20:50:41.773: E/AndroidRuntime(194): at java.lang.reflect.Method.invoke(Method.java:521)
06-09 20:50:41.773: E/AndroidRuntime(194): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-09 20:50:41.773: E/AndroidRuntime(194): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-09 20:50:41.773: E/AndroidRuntime(194): at dalvik.system.NativeStart.main(Native Method)
您使用的是什麼_Adapter_? –
根據傳遞給適配器的佈局,「視圖視圖」可能是一個LinearLayout(或類似的),因此將佈局轉換爲TextView並試圖使用getText()會每次都會崩潰。 – Sam
請添加一些日誌。 –