Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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:SimpleCursorAdapter.bindView有时为findViewById提供空值_Android_Listview - Fatal编程技术网

Android:SimpleCursorAdapter.bindView有时为findViewById提供空值

Android:SimpleCursorAdapter.bindView有时为findViewById提供空值,android,listview,Android,Listview,我有一个从SimpleCursorAdapter扩展而来的自定义ListCursorAdapter。在列表的行中,有两个文本字段和一个复选框 快速滚动时,复选框的行为很奇怪;选定的行从一行“跳”到另一行,例如,如果第三行包含选定的复选框,并且我正在快速滚动,则会突然选择另一行 我发现有时候,我的bindView方法中的findViewById返回null: @Override public final View newView(final Context context, final C

我有一个从SimpleCursorAdapter扩展而来的自定义ListCursorAdapter。在列表的行中,有两个文本字段和一个复选框

快速滚动时,复选框的行为很奇怪;选定的行从一行“跳”到另一行,例如,如果第三行包含选定的复选框,并且我正在快速滚动,则会突然选择另一行

我发现有时候,我的bindView方法中的findViewById返回null:

    @Override
public final View newView(final Context context, final Cursor cursor, final ViewGroup parent) {
    final LayoutInflater inflater = LayoutInflater.from(context);
    final View v = inflater.inflate(mLayout, null);

    return v;
}

@Override
public final void bindView(final View v, final Context context, final Cursor cursor) {
    int haltestelleCol = cursor.getColumnIndex("haltestelle");
    int nameCol = cursor.getColumnIndex("name");
    int linieCol = cursor.getColumnIndex("linie");
    int startseiteCol = cursor.getColumnIndex("startseite");
    int idCol = cursor.getColumnIndex("_id");
    final String haltestelleString = cursor.getString(haltestelleCol);
    final String nameString = cursor.getString(nameCol);

    // Next set the haltestelle of the entry.
    final TextView haltestelle = (TextView) v.findViewById(R.id.favorite_haltestelle);
    if (haltestelle != null) {
        if (nameString != null && !nameString.equals("")) {
           haltestelle.setText(nameString);
        } else {
            haltestelle.setText(haltestelleString);
        }
    }

    // next set the linie
    final TextView linie = (TextView) v.findViewById(R.id.favorite_linie);
    if (linie != null) {
        linie.setText(cursor.getString(linieCol));
    }

    // set startseite-flag or not
    final int startseite = cursor.getInt(startseiteCol);
    final CheckBox startseiteCheckbox = (CheckBox) v.findViewById(R.id.favorite_startseite);
    final int id = cursor.getInt(idCol);
    if (startseiteCheckbox != null) {
        if (startseite > 0) {
          startseiteCheckbox.setChecked(true);
        }

        checkboxes.add(startseiteCheckbox);
        startseiteCheckbox.setId(id);
        startseiteCheckbox.setOnClickListener(new StartseiteClickListener(cursor.getPosition()));
    } else {
      System.out.println();
    }
}
i、 我在“System.out.println()”部分。有人能告诉我为什么我有这种行为吗?经常调用bindView方法对吗?它不应该每行只调用一次吗

非常感谢

更新: 有两种不同的堆栈跟踪: 如果返回的复选框不为空(=当它工作时),StackTrace如下所示:

Thread [<3> main] (Suspended (breakpoint at line 110 in FavoriteListCursorAdapter)) 
FavoriteListCursorAdapter.bindView(View, Context, Cursor) line: 110 
FavoriteListCursorAdapter(CursorAdapter).getView(int, View, ViewGroup) line: 186    
ListView(AbsListView).obtainView(int) line: 1274    
ListView.makeAndAddView(int, int, boolean, int, boolean) line: 1668 
ListView.fillUp(int, int) line: 667 
ListView.fillGap(boolean) line: 613 
ListView(AbsListView).trackMotionScroll(int, int) line: 2531    
ListView(AbsListView).onTouchEvent(MotionEvent) line: 2001  
ListView.onTouchEvent(MotionEvent) line: 3234   
ListView(View).dispatchTouchEvent(MotionEvent) line: 3709   
ListView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 852   
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
ViewFlipper(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
FavoritenActivity(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
TabHost(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
Scout(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
ViewRoot.handleMessage(Message) line: 1691  
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 4363    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 521  
ZygoteInit$MethodAndArgsCaller.run() line: 860  
ZygoteInit.main(String[]) line: 618 
NativeStart.main(String[]) line: not available [native method]
Thread [<3> main] (Suspended (breakpoint at line 123 in FavoriteListCursorAdapter)) 
FavoriteListCursorAdapter.bindView(View, Context, Cursor) line: 123 
FavoriteListCursorAdapter(CursorAdapter).getView(int, View, ViewGroup) line: 186    
ListView(AbsListView).obtainView(int) line: 1256    
ListView.makeAndAddView(int, int, boolean, int, boolean) line: 1668 
ListView.fillUp(int, int) line: 667 
ListView.correctTooHigh(int) line: 1289 
ListView.fillGap(boolean) line: 609 
ListView(AbsListView).trackMotionScroll(int, int) line: 2531    
ListView(AbsListView).onTouchEvent(MotionEvent) line: 2001  
ListView.onTouchEvent(MotionEvent) line: 3234   
ListView(View).dispatchTouchEvent(MotionEvent) line: 3709   
ListView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 852   
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
ViewFlipper(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
FavoritenActivity(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
TabHost(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
Scout(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
ViewRoot.handleMessage(Message) line: 1691  
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 4363    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 521  
ZygoteInit$MethodAndArgsCaller.run() line: 860  
ZygoteInit.main(String[]) line: 618 
NativeStart.main(String[]) line: not available [native method]  
Thread[main](挂起(FavoriteListCursorAdapter中第110行的断点))
FavoriteListCursorAdapter.bindView(视图、上下文、光标)行:110
FavoriteListCursorAdapter(CursorAdapter).getView(int,View,ViewGroup)行:186
列表视图(AbsListView)。获取视图(int)行:1274
makeAndAddView(int,int,boolean,int,boolean)行:1668
ListView.fillUp(int,int)行:667
ListView.fillGap(布尔)行:613
ListView(AbsListView)。轨迹运动滚动(int,int)行:2531
ListView(AbsListView).onTouchEvent(MotionEvent)行:2001
onTouchEvent(MotionEvent)行:3234
ListView(视图).dispatchTouchEvent(MotionEvent)行:3709
ListView(ViewGroup).dispatchTouchEvent(MotionEvent)行:852
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
ViewFlipper(ViewGroup).dispatchTouchEvent(MotionEvent)行:884
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
FrameLayout(视图组).dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView(视图组)。dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent)行:1659
PhoneWindow.superDispatchTouchEvent(MotionEvent)行:1107
FavoriteActivity(活动)。dispatchTouchEvent(MotionEvent)行:2061
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent)行:1643
FrameLayout(视图组).dispatchTouchEvent(MotionEvent)行:884
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
TabHost(ViewGroup).dispatchTouchEvent(MotionEvent)行:884
FrameLayout(视图组).dispatchTouchEvent(MotionEvent)行:884
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView(视图组)。dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent)行:1659
PhoneWindow.superDispatchTouchEvent(MotionEvent)行:1107
侦察员(活动)。dispatchTouchEvent(MotionEvent)线路:2061
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent)行:1643
ViewRoot.handleMessage(消息)行:1691
ViewRoot(处理程序)。dispatchMessage(消息)行:99
Looper.loop()行:123
ActivityThread.main(字符串[])行:4363
invokenactive(Object,Object[],Class,Class[],Class,int,boolean)行:不可用[本机方法]
调用(对象,对象…)行:521
ZygoteInit$MethodAndArgsCaller.run()行:860
颧骨单位。主(字符串[])行:618
NativeStart.main(字符串[])行:不可用[本机方法]
当返回的对象为null时,StackTrace如下所示:

Thread [<3> main] (Suspended (breakpoint at line 110 in FavoriteListCursorAdapter)) 
FavoriteListCursorAdapter.bindView(View, Context, Cursor) line: 110 
FavoriteListCursorAdapter(CursorAdapter).getView(int, View, ViewGroup) line: 186    
ListView(AbsListView).obtainView(int) line: 1274    
ListView.makeAndAddView(int, int, boolean, int, boolean) line: 1668 
ListView.fillUp(int, int) line: 667 
ListView.fillGap(boolean) line: 613 
ListView(AbsListView).trackMotionScroll(int, int) line: 2531    
ListView(AbsListView).onTouchEvent(MotionEvent) line: 2001  
ListView.onTouchEvent(MotionEvent) line: 3234   
ListView(View).dispatchTouchEvent(MotionEvent) line: 3709   
ListView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 852   
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
ViewFlipper(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
FavoritenActivity(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
TabHost(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
Scout(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
ViewRoot.handleMessage(Message) line: 1691  
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 4363    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 521  
ZygoteInit$MethodAndArgsCaller.run() line: 860  
ZygoteInit.main(String[]) line: 618 
NativeStart.main(String[]) line: not available [native method]
Thread [<3> main] (Suspended (breakpoint at line 123 in FavoriteListCursorAdapter)) 
FavoriteListCursorAdapter.bindView(View, Context, Cursor) line: 123 
FavoriteListCursorAdapter(CursorAdapter).getView(int, View, ViewGroup) line: 186    
ListView(AbsListView).obtainView(int) line: 1256    
ListView.makeAndAddView(int, int, boolean, int, boolean) line: 1668 
ListView.fillUp(int, int) line: 667 
ListView.correctTooHigh(int) line: 1289 
ListView.fillGap(boolean) line: 609 
ListView(AbsListView).trackMotionScroll(int, int) line: 2531    
ListView(AbsListView).onTouchEvent(MotionEvent) line: 2001  
ListView.onTouchEvent(MotionEvent) line: 3234   
ListView(View).dispatchTouchEvent(MotionEvent) line: 3709   
ListView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 852   
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
ViewFlipper(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
FavoritenActivity(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
TabHost(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
FrameLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884    
LinearLayout(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884   
PhoneWindow$DecorView(ViewGroup).dispatchTouchEvent(MotionEvent) line: 884  
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent) line: 1659   
PhoneWindow.superDispatchTouchEvent(MotionEvent) line: 1107 
Scout(Activity).dispatchTouchEvent(MotionEvent) line: 2061  
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent) line: 1643    
ViewRoot.handleMessage(Message) line: 1691  
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 4363    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 521  
ZygoteInit$MethodAndArgsCaller.run() line: 860  
ZygoteInit.main(String[]) line: 618 
NativeStart.main(String[]) line: not available [native method]  
Thread[main](挂起(FavoriteListCursorAdapter中第123行的断点))
FavoriteListCursorAdapter.bindView(视图、上下文、光标)行:123
FavoriteListCursorAdapter(CursorAdapter).getView(int,View,ViewGroup)行:186
列表视图(AbsListView)。获取视图(int)行:1256
makeAndAddView(int,int,boolean,int,boolean)行:1668
ListView.fillUp(int,int)行:667
ListView.correctTooHigh(int)行:1289
ListView.fillGap(布尔)行:609
ListView(AbsListView)。轨迹运动滚动(int,int)行:2531
ListView(AbsListView).onTouchEvent(MotionEvent)行:2001
onTouchEvent(MotionEvent)行:3234
ListView(视图).dispatchTouchEvent(MotionEvent)行:3709
ListView(ViewGroup).dispatchTouchEvent(MotionEvent)行:852
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
ViewFlipper(ViewGroup).dispatchTouchEvent(MotionEvent)行:884
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
FrameLayout(视图组).dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView(视图组)。dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent)行:1659
PhoneWindow.superDispatchTouchEvent(MotionEvent)行:1107
FavoriteActivity(活动)。dispatchTouchEvent(MotionEvent)行:2061
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent)行:1643
FrameLayout(视图组).dispatchTouchEvent(MotionEvent)行:884
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
TabHost(ViewGroup).dispatchTouchEvent(MotionEvent)行:884
FrameLayout(视图组).dispatchTouchEvent(MotionEvent)行:884
LinearLayout(视图组)。dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView(视图组)。dispatchTouchEvent(MotionEvent)行:884
PhoneWindow$DecorView.superDispatchTouchEvent(MotionEvent)行:1659
PhoneWindow.superDispatchTouchEvent(MotionEvent)行:1107
侦察员(活动)。dispatchTouchEvent(MotionEvent)线路:2061
PhoneWindow$DecorView.dispatchTouchEvent(MotionEvent)行:1643
ViewRoot.handleMessage(消息)行:1691
ViewRoot(处理程序)。dispatchMessage(消息)行:99
Looper.loop()行:123
ActivityThread.main(字符串[])行:4363
invokenactive(Object,Object[],Class,Class[],Class,int,boolean)行:不可用[本机方法]
调用(对象,对象…)行:521
ZygoteInit$MethodAndArgsCaller.run()行:860
主合子体(