2013-04-29 3 views
1

Итак, у меня есть сегмент кода, который извлекает данные из базы данных, полной пользовательских записей. У меня также есть EditText с текстовым наблюдателем, который позволяет им фильтровать записи через их ввод. Наконец, у меня есть счетчик, который позволяет пользователю сортировать возвращаемые запросы.Сортировка отфильтрованного запроса sqlite

Все работает, кроме случаев, когда пользователь фильтрует записи, затем пытается их сортировать. На этом этапе все записи перезагружаются и сортируются.

Таким образом, очевидно, что фильтр не повторно занят, однако я не понимаю, почему и что делать, чтобы исправить это.

private void displayListView(String sortdata) { 
    // TODO Auto-generated method stub 
    // Building the list 
    info.open(); 
    Cursor cursor = info.getListData(sortdata); 
    info.close(); 
    String[] listViewColumns = new String[] { Database.KEY_BREWNAME, Database.KEY_BREWERY, Database.KEY_RATING, 
      Database.KEY_DATEIMAGENAME, }; 
    int[] dataToListView = new int[] { R.id.tvBrewName, R.id.tvBrewery, R.id.tvRating, R.id.ivThumb, }; 
    dataAdapter = new SimpleCursorAdapter(this, R.layout.entrymain, cursor, listViewColumns, dataToListView, 0); 
    ViewBinder viewBinder = new ViewBinder() { 
     @Override 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      if (!(view instanceof ImageView) || view.getId() != R.id.ivThumb) { 
       return false; 
      } 
      ImageView image = (ImageView)view; 

      if (new File(Environment.getDataDirectory() + "/data/com.ex.beerlog/files/" + cursor.getString(columnIndex)) 
        .exists()) { 
       try { 
        FileInputStream fis = openFileInput(cursor.getString(columnIndex)); 
        Bitmap bmp1 = BitmapFactory.decodeStream(fis); 
        bmp1 = cropToCicle(bmp1); 
        image.setImageBitmap(bmp1); 
        fis.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } else { 
       image.setImageResource(R.drawable.bl); 
       Log.w("Start", "=-=-=-=-" + cursor.getString(columnIndex) + " === Doesn't exist"); 
      } 
      return true; 
     } 
    }; 
    dataAdapter.setViewBinder(viewBinder); 
    listview.setAdapter(dataAdapter); 

    // What happens when a list item is clicked 
    OnItemClickListener onListItemClick = new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> listView, View view, int position, long id) { 
      Cursor clickCursor = (Cursor)listView.getItemAtPosition(position); 
      String clickData = clickCursor.getString(clickCursor.getColumnIndexOrThrow("_id")); 
      Bundle backpack = (Bundle)new Bundle(); 
      backpack.putString("clickdata", clickData); 
      Intent a = new Intent(Start.this, AddEdit.class); 
      a.putExtras(backpack); 
      startActivity(a); 
     } 
    }; 
    listview.setOnItemClickListener(onListItemClick); 

    // /Modifying the list entries while the user types, setup a filter 
    TextWatcher watchSearch = new TextWatcher() { 
     @Override 
     public void afterTextChanged(Editable s) {} 

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

     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      dataAdapter.getFilter().filter(s.toString()); 
     } 
    }; 
    sqlSearchText.addTextChangedListener(watchSearch); 

    FilterQueryProvider filterQuery = new FilterQueryProvider() { 
     public Cursor runQuery(CharSequence constraint) { 
      info.open(); 
      return info.fetchEntriesByName(constraint.toString(), sortSpinValues); 
     } 
    }; 
    info.close(); 
    dataAdapter.setFilterQueryProvider(filterQuery); 

} 


public void onItemSelected(AdapterView<?> arg0, View arg1, int pos, long arg3) { 
    // TODO Auto-generated method stub 
    sortSpinValues = sortSpinValue[pos]; 
    displayListView(sortSpinValues); 
} 

Я полагаю, что это, вероятно, будет чем-то очень простым. Я просто не могу понять, как это понять.

Благодаря

ответ

0

Так потратил немного времени на изучение о том, как фильтры работают и поняли, что я не перезагружать фильтр после того, как значение вертушки изменялось в (или я не знаю, что не является перезагружен). поэтому я могу справиться с этим дополнительным битом кода, чтобы решить эту проблему.

if (sqlSearchText.length() > 1) { 
      String f = sqlSearchText.getText().toString(); 
      dataAdapter.getFilter().filter(f); 
     } 
Смежные вопросы