目前,我正在使用列表视图,列表视图包含三个值,ID,标题和说明。
以下是列表视图的XML ..
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/Ln"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:scrollbars="horizontal"
android:weightSum="4" >
<TextView
android:id="@+id/txtNoteID"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.39"
android:gravity="center"
android:text="0"
android:textSize="20sp" />
<TextView
android:id="@+id/txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:text="Pub" />
</LinearLayout>
<TextView
android:id="@+id/txtDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:text="PubTest" />
</LinearLayout>
列表中填充了数据库中的数据,到目前为止一切正常。但是我确实需要能够从数据库中删除项目,我认为当单击项目时有一个上下文菜单将是最简单的,因为用户可以选择要删除的项目。但是我收到此错误
&#34; java.lang.NullPointerException:尝试调用虚方法 &#39; java.lang.CharSequence android.widget.TextView.getText()&#39;在null 对象参考&#34;
这是上下文菜单删除代码......
public boolean onContextItemSelected(MenuItem item)
{
//AdapterView.AdapterContextMenuInfo Info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.DeleteItem: {
DB = new DBController(getApplicationContext());
SQLiteDatabase db = DB.getWritableDatabase();
db.delete("NOTES", "ID=" + NoteID.getText().toString(), null);
Toast.makeText(StoredNoteList.this, "deleted successfully", Toast.LENGTH_SHORT).show();
Adapter.notifyDataSetChanged();
return true;
}
}
我非常肯定问题出在NoteID.getText()。toString() - 我的理论是,当我从列表中选择某些内容时,选择的项目ID不会保存在NoteID变量,这只是一个理论。
对于那些要求NoteID的人 声明并分配NoteID
TextView NoteID,NoteTitle,NoteDesc;
NoteID=(TextView)findViewById(R.id.txtNoteID);
在做了一些更改后,我现在看到我的NoteID肯定是空的
public boolean onContextItemSelected(MenuItem item)
{
//AdapterView.AdapterContextMenuInfo Info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
NoteList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ID =((TextView)parent.findViewById(R.id.txtNoteID)).getText().toString();
}
});
switch (item.getItemId())
{
case R.id.DeleteItem:
{
DB = new DBController(getApplicationContext());
SQLiteDatabase db = DB.getWritableDatabase();
db.delete("NOTES", "ID=" + ID, null);
Toast.makeText(StoredNoteList.this,"deleted successfully", Toast.LENGTH_SHORT).show();
Adapter.notifyDataSetChanged();
return true;
}
调试器显示我NoteID为null,我想一旦我找到一种方法将itemList中的选定id存储到NoteID变量中,我的应用程序应该没有问题。
这是我感兴趣的任何人的适配器代码
Adapter = new SimpleAdapter(StoredNoteList.this, Data, R.layout.rows,new String[]{"ID","TITLE","DESCRIPTION"}, new int[]{R.id.txtNoteID,R.id.txtTitle,R.id.txtDesc});
NoteList.setAdapter(Adapter);
任何帮助将不胜感激, 谢谢
答案 0 :(得分:0)
您使用的是自定义适配器吗?我认为您的问题是它不知道要获取的WHICH NoteID。由于ListView,实际上有一堆带有txtNoteID的元素。所以你想要做的事情是:
((TextView)parent.findViewById(R.id.txtNoteID)).getText().toString()
onItemClick中的视图应该是正确的视图,您可能需要抓取父视图并在该listView项的上下文中查找txtNoteID,尽管如此...
right