Checkboxes when caring for a screen lose their positions when returning. Here - SimpleCursorAdapter - the filter for the cursor is all the code (my question). How to implement a method to save boolean values? Really, instead of a cursor in the adapter, I need to send an array of boolean values? And how to take data through the cursor in the bindView () method? After all, I will remove the cursor, but it is needed.
Method for receiving data from the database
private void getProductList() { String filter = "list=" + intValue; final Cursor cursor = mSqLiteDatabase.query("products", new String[] {DatabaseProductHelper.PRODUCT_ID, DatabaseProductHelper.PRODUCT_NAME, DatabaseProductHelper.PRODUCT_COUNT, DatabaseProductHelper.PRODUCT_LIST, DatabaseProductHelper.PRODUCT_TYPE, DatabaseProductHelper.PRODUCT_COMPLETE}, null, null, null, null, null) ; final Cursor cursorc = mSqLiteDatabase.query("products", new String[] {DatabaseProductHelper.PRODUCT_ID, DatabaseProductHelper.PRODUCT_NAME, DatabaseProductHelper.PRODUCT_COUNT, DatabaseProductHelper.PRODUCT_LIST, DatabaseProductHelper.PRODUCT_TYPE, DatabaseProductHelper.PRODUCT_COMPLETE}, filter, null, null, null, null) ; final ArrayList<String> arrTblNames = new ArrayList<String>(); if (cursor.moveToFirst()) { while ( !cursor.isAfterLast() ) { if(cursor.getInt(cursor.getColumnIndex("list"))==intValue) { arrTblNames.add(cursor.getString(cursor.getColumnIndex("name"))); } cursor.moveToNext(); } String[] from = {DatabaseProductHelper.PRODUCT_NAME, DatabaseProductHelper.PRODUCT_COUNT, DatabaseProductHelper.PRODUCT_TYPE, DatabaseProductHelper.PRODUCT_COMPLETE}; int[] to = {R.id.ColMemberID, R.id.ColName, R.id.count_tv, R.id.chb_products}; adapter = new InteractiveArrayAdapter(ListBuilder.this, R.layout.row, cursorc, from, to ); //lv_products.setAdapter(adapter); } if(!arrTblNames.isEmpty()){ empty_bd_layout.setAlpha(0); lv_products.setAdapter(adapter); } else{ empty_bd_layout.setAlpha(255); } } And the adapter itself
public class InteractiveArrayAdapter extends SimpleCursorAdapter { private int layout; private boolean checked[]; public InteractiveArrayAdapter(Context _context, int _layout, Cursor _cursor, String[] _from, int[] _to) { super(_context, _layout, _cursor, _from, _to); layout = _layout; int counts = _cursor.getCount(); checked = new boolean[counts]; for (int i = 0; i < counts; i++){ int checkMarker = _cursor.getInt(_cursor.getColumnIndex("complete")); checked[i] = checkMarker == 1; } } @Override public void bindView(View view, Context _context, Cursor _cursor) { String prod_name = _cursor.getString(_cursor.getColumnIndex(DatabaseProductHelper.PRODUCT_NAME)); String prod_count = _cursor.getString(_cursor.getColumnIndex(DatabaseProductHelper.PRODUCT_COUNT)); String prod_type = _cursor.getString(_cursor.getColumnIndex(DatabaseProductHelper.PRODUCT_TYPE)); // int prod_complete = _cursor.getInt(_cursor.getColumnIndex(DatabaseProductHelper.PRODUCT_COMPLETE)); TextView name_prod_tv = (TextView)view.findViewById(R.id.ColMemberID); TextView count_prod_tv = (TextView)view.findViewById(R.id.ColName); TextView type_prod_tv = (TextView)view.findViewById(R.id.count_tv); CheckBox chb = (CheckBox)view.findViewById(R.id.chb_products); chb.setFocusable(false); chb.setClickable(false); name_prod_tv.setText(prod_name); count_prod_tv.setText(prod_count); type_prod_tv.setText(prod_type); chb.setChecked(checked[_cursor.getPosition()]); } @Override public View newView(Context _context, Cursor _cursor, ViewGroup _parent) { LayoutInflater inflater = (LayoutInflater)_context.getSystemService(_context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(layout, _parent, false); return view; } public void setChecked(int position){ // ΠΈΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠ»ΠΈΠΊΠ° ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ checked[position]=!checked[position]; } } LogCat FATAL EXCEPTION: main 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime Process: ru.diskrim.listbuy, PID: 1468 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo {ru.diskrim.listbuy / ru.diskrim.listbuy.ListBuilder}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 4 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.app. ActivityThread.performLaunchActivity (ActivityThread.java:2325) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2387) 05-09 07: 18: 292929 1468 1468 E AndroidRuntime at android.app.ActivityThread.access $ 800 (ActivityThread.java:151) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1303) 05-09 07:18 : 29.529 1468 1468 E AndroidRuntime at android.os.Handler.dispatchMessage (Handler.java:102) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at androi d.os.Looper.loop (Looper.java:135) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.app.ActivityThread.main (ActivityThread.java 12.2525) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at java.lang.reflect.Method.invoke (Native Method) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at java.lang.reflect.Method.invoke (Method.javaUE72) 05-09 07 : 18: 29.529 1468 1468 E AndroidRuntime at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:902) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at com.android.internal.os. ZygoteInit.main (ZygoteInit.java:697) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at de.robv.android.xposed.XposedBridge.main (XposedBridge.java:117) 05-09 07: 18: 2929 1468 1468 E AndroidRuntime Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 4 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.database.AbstractCursor.checkPosition (AbstractCursor.java T26) 05 -09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.database.AbstractWindowedCursor.checkPosition (AbstractWindowedCursor.java:136) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.database.AbstractWindowedCursor.getInt (AbstractWindowedCursor.java:68) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at en.diskrim.listbuy.ListBuilder $ InteractiveArrayAdapter. (ListBuilder.java:245) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at en.diskrim.listbuy.ListBuilder.getProductList (ListBuilder.jr 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at en.diskrim.listbuy.ListBuilder.onCreate (ListBuilder.java:184) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.app.Activity.performCreate ( Activity.java:6033) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1106) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime at android.app. ActivityThread.performLaunchActivity (ActivityThread.java:2278) 05-09 07: 18: 29.529 1468 1468 E AndroidRuntime ... 11 more
query()/ request should look something like this:final Cursor cursorc = mSqLiteDatabase.query("products", new String[] {DatabaseProductHelper.PRODUCT_ID, DatabaseProductHelper.PRODUCT_NAME, DatabaseProductHelper.PRODUCT_COUNT, DatabaseProductHelper.PRODUCT_LIST, DatabaseProductHelper.PRODUCT_TYPE, DatabaseProductHelper.PRODUCT_COMPLETE}, "list = ?", new String[] {""+ intValue], null, null, null) ;- pavlofff