0

これが私のカスタムアダプターです:

public View getView(int position, View convertView, ViewGroup parent) {

    View row = super.getView(position, convertView, parent);


    Cursor cursbbn  = getCursor();



    if (row == null)

    {

        LayoutInflater inflater = (LayoutInflater) localContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.listtype, null);
    }


    String Title = cursbbn.getString(2);
    String Readyin = cursbbn.getString(4);
    String Faovoites=cursbbn.getString(8);


    TextView titler=(TextView)row.findViewById(R.id.listmaintitle);
    TextView readyinr=(TextView)row.findViewById(R.id.listreadyin);

     int colorPos = position % colors.length;
     row.setBackgroundColor(colors[colorPos]);

    titler.setText(Title);
    readyinr.setText(Readyin);

    ImageView picture = (ImageView) row.findViewById(R.id.imageView1);
    Bitmap bitImg = BitmapFactory.decodeResource(localContext.getResources(), R.drawable.seafood);

    if(Title.contentEquals("Fajita Raps"))
        picture.setImageBitmap(getRoundedCornerImage(bitImg));


    if (Faovoites.contentEquals("YES")) {

        ImageView star = (ImageView) row.findViewById(R.id.favoritesicon);
        star.setVisibility(View.VISIBLE);

    }

    return row;
}

そして、これは私の Search Edittext aftertextchanged イベントです

public void afterTextChanged(final Editable s) {

            final String[] columns = new String[] {

            "_id", COL_SanID, COL_SanTitle, COL_SanCat, COL_SanReadyin,

            COL_SandServing, COL_SandIngred, COL_SandDirect, COL_SandFavor };

            Bundle extrass = getIntent().getExtras();

            final String Type = extrass.getString("CategoryType");

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

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

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

                    return curs;

                }
            });

最後に: Logcat 例外

04-26 18:56:50.310: E/AndroidRuntime(878): 致命的な例外: メイン 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(AbstractWindowedCursorjava.: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(Native) でメソッド) 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(ネイティブメソッド)

4

1 に答える 1

1

getView()あなたが電話すると、あなたはlocalCursor.moveToPosition(position);得るjava.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery

なぜこれが起こるのですか?フィルタがリスト ビューに適用されると、古いカーソルが閉じられ、代わりに新しいカーソルが使用されるためです。getCursor()最初のカーソルを追跡する代わりに呼び出すことで、現在の基になるカーソルを取得できます。削除して代わりにCursor localCursor使用してください。getCursor()

于 2012-04-22T07:49:54.213 に答える