2012-04-22 5 views
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; 
} 

そして、これは私の検索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例外

4月26日18: 56:50.310:E/AndroidRuntime(878):致命的除外:メイン 04-26 18:56:50.310:E/AndroidRuntime(878):android.database.CursorIndexOutOfB oundsException:インデックス-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: AndroidRuntime(878):アンドロイド.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 $ MethodAndArgsCal ler.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(ネイティブメソッド)getView()

+0

「mDb」とは何ですか、それをどこで宣言しますか?たぶん、あなたが使っているすべての場所を見る必要があるかもしれません。 –

+0

私は同じクラスのメインアクティビティにmDbデータベースを宣言します。SQLiteDatabase mDb; MyDbHelper mHelperを使用してデータベーステーブルを作成し、列を定義します。私は問題がデータベースに正しく値を取得していると私はカスタムcursoradapterが定義されていない場合はビューを検索することができないと思う。カスタムアダプタの最初の行(カーソル位置に移動する)を追加すると、このエラーが表示されます。もっとコードが必要な場合は教えてください –

答えて

1

であなたがjava.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQueryを得るlocalCursor.moveToPosition(position);呼び出します。

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

+0

あなたの答えはArhimedありがとう、私はそれを試してみましたが、それは私にもエラーを与えますが、私は開発に初心者として間違って実装されている可能性があります。 –

+0

私は上記のコードを編集して、何かが間違っているかどうかを確認することができます –

+0

Thankssssssssss私は何が間違っていたのか理解しました。 :) –

関連する問題