我通过ListAdapter在列表中显示一些sql数据。除非我尝试为列表中的每个项目设置单击侦听器,否则一切正常。单击任何项目时没有任何反应;没有错误消息,它只是默默地失败。
public class Notes extends ListActivity implements OnClickListener {
private static final String TAG = "Notes";
private NotesData notes;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
notes = new NotesData(this);
try {
Cursor cursor = getNotes();
showNotes(cursor); /* set the cursor to the listadapter */
ListView ls = (ListView) findViewById(android.R.id.list);
ls.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View v,
int position,long id) {
Toast.makeText(getApplicationContext(),"clicked",
Toast.LENGTH_SHORT).show();
}
});
} finally {
notes.close();
}
}
main.xml,包含listview:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/new_note_button"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/new_note"/>
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/empty"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/empty"/>
</LinearLayout>
我有什么遗失的吗?
答案 0 :(得分:0)
没有什么遗漏,你的代码是完全正确的,只需将getApplicationContext()替换为“this”就可以解决问题,因为你需要传递的是对当前组件的上下文的引用而不是上下文的当前的过程。
希望它有所帮助。 哈斯。
答案 1 :(得分:0)
我猜你的列表项是可点击的。 (view.setClickable(真))
当列表项可单击时,将调用onItemClick。
答案 2 :(得分:0)
您需要将android:focusable="false"
添加到main.xml文件中的按钮。该按钮使焦点远离列表项。
这肯定会解决您的问题。
答案 3 :(得分:-1)
我建议在你的try语句中抛出这样的东西
try{
//yourstuff
} catch (Exception e) {
e.printStackTrace();
}
然后检查以查看抛出的错误消息。它可能在设置onClickListener时抛出错误,也许有些东西无效,但只要所有这些都在try语句中,它就不会给你任何有用的错误信息。因此,您也可以尽可能多地从try语句中提取,直到找到问题为止。 : - )