Android ListView和自定义游标适配器出现问题
在这里转圈-如果下面的代码看起来乱七八糟,我表示歉意,但我一直按照这里的旧/新建议进行更改,没有任何效果 只是尝试用游标适配器从DB填充listView,这必须是自定义的,因为我想访问每行中的各个字段 充其量,我已经让listView正确地读取和显示了数据,但是onClick没有工作,根本没有响应,没有logcat错误。我读过很多文章,尝试过各种尝试,但都没有成功,更糟糕的是,我现在无法回到第一个半工作版本 所以,我的主要活动是:Android ListView和自定义游标适配器出现问题,android,listview,cursor,adapter,Android,Listview,Cursor,Adapter,在这里转圈-如果下面的代码看起来乱七八糟,我表示歉意,但我一直按照这里的旧/新建议进行更改,没有任何效果 只是尝试用游标适配器从DB填充listView,这必须是自定义的,因为我想访问每行中的各个字段 充其量,我已经让listView正确地读取和显示了数据,但是onClick没有工作,根本没有响应,没有logcat错误。我读过很多文章,尝试过各种尝试,但都没有成功,更糟糕的是,我现在无法回到第一个半工作版本 所以,我的主要活动是: public OnItemClickListener mTrip
public OnItemClickListener mTripClickHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create/prepare database (code removed for clarity)
//Display trips - first get any entries
tripCur = mpgDB.query(dbHistory.TABLE_NAME, TRIP_PROJ, whereClause, null, null, null, null);
int tmpCnt = tripCur.getCount();
if (tmpCnt > 0) {
tripCur.moveToFirst();
// build a listView adapter
Log.i(LOGTAG,"About to create listView...");
//tripList = (ListView) findViewById(android.R.id.list);
tripList = getListView();
Log.i(LOGTAG,"ListView created...");
Log.i(LOGTAG,"About to create adapter...");
tripAdapter = new tripListAdapter(this, tripCur);
setListAdapter(tripAdapter);
setContentView(R.layout.activity_trip_display);
//tripList.setOnItemClickListener(mTripClickHandler);
tripList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
// Do something in response to the click
// Enable other buttons
togBtns(true);
}
});
…和LogCat仅前几行-所有行都与系统代码有关,与我无关:
06-16 09:49:38.110: I/WIBBLE(1184): About to create listView...
06-16 09:49:38.150: I/WIBBLE(1184): ListView created...
06-16 09:49:38.150: I/WIBBLE(1184): About to create adapter...
06-16 09:49:38.240: I/WIBBLE(1184): OnResume with this many rows returned by cursor: 3
06-16 09:49:38.240: I/WIBBLE(1184): In the loop, so cursor is not null....
06-16 09:49:38.320: I/WIBBLE(1184): In getView...
06-16 09:49:38.320: I/WIBBLE(1184): Leaving getView...
06-16 09:49:38.330: D/AndroidRuntime(1184): Shutting down VM
06-16 09:49:38.330: W/dalvikvm(1184): threadid=1: thread exiting with uncaught exception (group=0x414c4700)
06-16 09:49:38.452: E/AndroidRuntime(1184): FATAL EXCEPTION: main
06-16 09:49:38.452: E/AndroidRuntime(1184): java.lang.NullPointerException
06-16 09:49:38.452: E/AndroidRuntime(1184): at android.widget.AbsListView.obtainView(AbsListView.java:2179)
06-16 09:49:38.452: E/AndroidRuntime(1184): at android.widget.ListView.measureHeightOfChildren(ListView.java:1247)
06-16 09:49:38.452: E/AndroidRuntime(1184): at a ndroid.widget.ListView.onMeasure(ListView.java:1159)
06-16 09:49:38.452: E/AndroidRuntime(1184): at android.view.View.measure(View.java:15848)
06-16 09:49:38.452: E/AndroidRuntime(1184): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5008)
06-16 09:49:38.452: E/AndroidRuntime(1184): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
有什么想法吗?public View getView int position,View v,ViewGroup父级未调用super.getViewposition,v,parent,它是创建和绑定视图实例的父级。正如您在CursorAdapter类中看到的:
/**
* @see android.widget.ListAdapter#getView(int, View, ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
if (!mDataValid) {
throw new IllegalStateException("this should only be called when the cursor is valid");
}
if (!mCursor.moveToPosition(position)) {
throw new IllegalStateException("couldn't move cursor to position " + position);
}
View v;
if (convertView == null) {
v = newView(mContext, mCursor, parent);
} else {
v = convertView;
}
bindView(v, mContext, mCursor);
return v;
}
您尚未从getView方法返回视图。当前返回空值。这就是为什么在getView中调用newview并返回适当的视图时会出现空指针异常 欲了解更多信息,请阅读下面的问题
当在列表视图中使用自定义适配器时,我遇到了相同的问题,项目单击不起作用。我在这里找到了解决方案: 基本上,您可以添加以下内容:
android:descendantFocusability="blocksDescendants"
由于子视图阻止了该事件,因此无法访问listR.layout.trip_行单个项目的自定义布局的父视图 Doh!!-非常感谢,虽然我现在回到了半工作版本,但至少没有崩溃。再次感谢。。。
android:descendantFocusability="blocksDescendants"