Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView和自定义游标适配器出现问题_Android_Listview_Cursor_Adapter - Fatal编程技术网

Android ListView和自定义游标适配器出现问题

Android ListView和自定义游标适配器出现问题,android,listview,cursor,adapter,Android,Listview,Cursor,Adapter,在这里转圈-如果下面的代码看起来乱七八糟,我表示歉意,但我一直按照这里的旧/新建议进行更改,没有任何效果 只是尝试用游标适配器从DB填充listView,这必须是自定义的,因为我想访问每行中的各个字段 充其量,我已经让listView正确地读取和显示了数据,但是onClick没有工作,根本没有响应,没有logcat错误。我读过很多文章,尝试过各种尝试,但都没有成功,更糟糕的是,我现在无法回到第一个半工作版本 所以,我的主要活动是: public OnItemClickListener mTrip

在这里转圈-如果下面的代码看起来乱七八糟,我表示歉意,但我一直按照这里的旧/新建议进行更改,没有任何效果

只是尝试用游标适配器从DB填充listView,这必须是自定义的,因为我想访问每行中的各个字段

充其量,我已经让listView正确地读取和显示了数据,但是onClick没有工作,根本没有响应,没有logcat错误。我读过很多文章,尝试过各种尝试,但都没有成功,更糟糕的是,我现在无法回到第一个半工作版本

所以,我的主要活动是:

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"