Ошибка указателя курсора за пределами границы с помощью ListView

Я столкнулся с неприятной проблемой, у меня есть Activity с 3 вкладками и 3 ListViews, я столкнулся с проблемой с событием OnItemClick. когда я нажимаю на любую запись, она открывает другое действие и показывает желаемые результаты должным образом, но когда я снова возвращаюсь к списку и пытаюсь открыть любую запись, я получил запрошенный индекс исключения Index -1. Что не имеет смысла, так это то, что список из 3 может работать правильно, а другие 2 - нет. Ниже мой код:

Это OnResume():

                public void onTextChanged(CharSequence s, int start, int before,
                int count) {

        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        public void afterTextChanged(final Editable s) {

            mAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                public Cursor runQuery(CharSequence constraint) {

                    String value = "%" + constraint + "%";
                    String Type2 = "%" + jype + "%";

                    curs = mDb.query(TABLE_NAME, columns, COL_SanTitle
                            + " LIKE ? And " + COL_SanCat + " LIKE ?",
                            new String[] { value, Type2 }, null, null,
                            COL_SanTitle + " ASC");

                    return curs;

                }
            });

            fAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                public Cursor runQuery(CharSequence constraint) {

                    String value = "%" + constraint + "%";

                    String Type2 = "%YES%";

                    cursF = mDb.query(TABLE_NAME, columns, COL_SandFavor
                            + " LIKE ? And " + COL_SanTitle + " LIKE ?",
                            new String[] { Type2, value }, null, null,
                            COL_SanTitle + " ASC");

                    return cursF;

                }
            });

            dAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                public Cursor runQuery(CharSequence constraint) {

                    String value = "%" + constraint + "%";
                    String Type2 = "%" + jype + "%";

                    cursD = mDb.query(TABLE_NAME, columns, COL_SanTitle
                            + " LIKE ? And " + COL_SanCat + " LIKE ?",
                            new String[] { value, Type2 }, null, null,
                            COL_SanTitle + " ASC");

                    cursD.moveToFirst();

                    return cursD;

                }

            }

            );




            fAdapter.getFilter().filter(s.toString());
            mAdapter.getFilter().filter(s.toString());
            dAdapter.getFilter().filter(s.toString());



            mAdapter.notifyDataSetChanged();
            fAdapter.notifyDataSetChanged();
            dAdapter.notifyDataSetChanged();
            mList.setAdapter(mAdapter);
            fList.setAdapter(fAdapter);
            dList.setAdapter(dAdapter);


            cursD.moveToFirst();
            cursS.moveToFirst();
            curs.moveToFirst();

        }
    });

Вот ошибка Logcat:

04-26 18:56:50.310: E/AndroidRuntime(878): НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main 04-26 18:56:50.310: E/AndroidRuntime(878): android.database.CursorIndexOutOfBoundsException: индекс -1 запрошен, с размером из 1 04-26 18:56:50.310: E/AndroidRuntime(878): в android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41) 04-26 18: 56:50.310: E/AndroidRuntime(878): в master.chef.mediamaster.Interface.onItemClick(Interface.java:781) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.widget.AdapterView .performItemClick(AdapterView.java:284) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.widget.ListView.performItemClick(ListView.java:3513) 04-26 18:56:50.310: E /AndroidRuntime(878): в android.widget.AbsListView$ PerformClick.run(AbsListView.java:1812) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.os.Handler.handleCallback(Handler.java:587) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.os.Handler.dispatchMessage(Handler.java:92) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.os.Looper.loop(Looper.java :123) 04-26 18:56:50.310: E/AndroidRuntime(878): в android.app.ActivityThread.main(ActivityThread.java:3683) 04-26 18:56:50.310: E/AndroidRuntime(878): в java.lang.reflect.Method.invokeNative(собственный метод) 04-26 18:56:50.310: E/AndroidRuntime(878): в java.lang.reflect.Method.invoke(Method.java:507) 04-26 18:56:50.310: E/AndroidRuntime(878): в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 04-26 18:56:50.310: E/AndroidRuntime(878): в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 04-26 18:56:50.310: E/AndroidRuntime(878): в dalvik.system.NativeStart.main(собственный метод)


person Mohamed Hemdan    schedule 26.04.2012    source источник
comment
Хемдан добавляет moveToFirst() в OnResume()   -  person ρяσѕρєя K    schedule 26.04.2012
comment
Спасибоsssssssssssss Imran , Это сделало это :))   -  person Mohamed Hemdan    schedule 26.04.2012
comment
есть подсказки??? я все еще сталкиваюсь с той же проблемой, что и ниже   -  person Mohamed Hemdan    schedule 26.04.2012


Ответы (1)


Вы начинаете другое действие, так что предыдущее открывается для удаления, и это звучит так. Чтобы решить эту проблему, переместите код генерации списка в onResume, тогда он будет выполняться, когда вы переходите к другому действию и возвращаетесь, а также при первоначальном запуске действия.

person Barak    schedule 26.04.2012
comment
Да, это уже в OnResume(). поэтому, когда вы вернетесь из другого действия, оно должно быть обновлено. Что не имеет смысла, у меня есть один список, который работает правильно из трех, которые являются mList. Всякий раз, когда я открываю какие-либо записи и снова возвращаюсь к списку, он не показывает ошибку. - person Mohamed Hemdan; 26.04.2012
comment
Я столкнулся с той же проблемой сейчас с моим списком в Query filtering . Я попытался переместить курсор на первый, но он все тот же, исключение Out ofbound. Я отредактировал свой код, чтобы посмотреть - person Mohamed Hemdan; 26.04.2012