我知道有很多类似的问题,并且发誓我已经尝试了所有这些问题。
我正在存储一个字符串和数据库,并希望将其作为列表检索。这是使用ListAdapter
完成的(我遵循了ToDo列表教程)。
问题是,我想为从DB中检索到的列表实现OnItemClickListener
。但是,当我将ListAdapter
替换为ListView
时,该应用程序将开始与NullPointException
崩溃。
以下是代码:
public class OfflineActivity extends ListActivity {
private ListAdapter listAdapter;
private TaskDBHelper helper;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.offline_list);
updateUI();
}
private void updateUI() {
helper = new TaskDBHelper(OfflineActivity.this);
SQLiteDatabase sqlDB = helper.getReadableDatabase();
Cursor cursor = sqlDB.query(TaskContract.TABLE,
new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK},
null, null, null, null, null);
listAdapter = new SimpleCursorAdapter(
this,
R.layout.offline_item,
cursor,
new String[]{TaskContract.Columns.TASK},
new int[]{R.id.taskTextView},
0
);
listView = (ListView) findViewById(R.id.list);
this.setListAdapter(listAdapter);
listView.setAdapter(listAdapter);
}
}
应用程序正常工作,直到我放listView.setAdapter(listAdapter);
。有没有办法在不对代码进行太多更改的情况下实现OnItemClickListener
。
以下是XML文件:
offline_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@android:id/list"
android:layout_weight="1" />
offline_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/taskTextView" />
PS。我确信listAdapter
不是空的。如果我不添加最后一行,list
会填充。从那以后坚持了2天。帮助
答案 0 :(得分:0)
目前,您声明了一个listView,但您从未为其分配值。 在设置适配器之前,需要将listView绑定到布局。
listView = (ListView) findViewById(R.id.list);
this.setListAdapter(listAdapter);
listView.setAdapter(listAdapter);
答案 1 :(得分:0)
当您的OfflineActivity
延长ListActivity
并且您已正确将ListView
ID设为@android:id/list
时,您无需通过ListView
引用findViewById(R.id.list)
{1}}因为它将在ListActivity
的实现中默认引用。所以不需要这两行:
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(listAdapter);
事实上,this.setListAdapter(listAdapter);
正在将适配器附加到ListView
。
要为您的列表实现OnClickListener,只需覆盖onListItemClick()
的{{1}},如下所示:
ListActivity
OfflineActivity