2011-12-13 48 views
-2

正如你可以看到这是我的列表类。我想能够使用editText过滤此列表。任何人都可以在正确的方向上指向我所需的查询布局或甚至代码片段?如何过滤数据库内容以填充ListView?

public class CBFilter extends ListActivity { 

EditText Filter; 
ListView RecipeNames; 
Cursor cursor; 
CBListAdapter adapter; 
CBDataBaseHelper data; 
SQLiteDatabase data2; 
TextView RecipeText, RowId; 
String[] from = { CBDataBaseHelper.KEY_NAME}; 
int[] to = { R.id.rowText}; 
ImageView image; 
byte[] dataImage; 
BufferedInputStream buf; 

public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
boolean diditwork; 
try{ 

//FileInputStream in;//= openFileInput("//STEFAN-PC/Users/stefan/Desktop/Uni Work/Image.jpg"); 
RecipeNames = (ListView) findViewById(android.R.id.list); 
RecipeNames.setTextFilterEnabled(true); 
RecipeText = (TextView) findViewById(R.id.recipeText); 
Filter = (EditText) findViewById(R.id.search_box); 

//adapter = new SimpleCursorAdapter (this, 0, cursor, null, null); 
image = (ImageView) findViewById(R.id.RecipeImage); 
data = new CBDataBaseHelper(this); 
data.open(); 
cursor = data.query(); 
startManagingCursor(cursor); 
adapter = new CBListAdapter(this, 0, cursor, from, to); 
RecipeNames.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 

Filter.addTextChangedListener(new TextWatcher() { 
    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(Editable s) { 

     RecipeNames = (ListView) findViewById(android.R.id.list); 
     CBListAdapter filteradapter = (CBListAdapter)RecipeNames.getAdapter(); 
     filteradapter.getFilter().filter(s.toString()); 


    } 




}); 

/*adapter.setFilterQueryProvider(new FilterQueryProvider() { 
     public Cursor runQuery(CharSequence constraint) { 
      return getDirectoryList(constraint); 
     } 
    });*/ 


/*adapter.setFilterQueryProvider(new FilterQueryProvider() { 
    public Cursor runQuery(CharSequence constraint) { 
     return getDirectoryList(constraint); 
    } 
});*/ 


}catch(Exception e){ 
diditwork = false; 
String error = e.toString(); 
Dialog d = new Dialog(this); 
d.setTitle("darn"); 
TextView tv = new TextView(this); 
tv.setText(error); 
d.setContentView(tv); 
d.show(); 
}} 


/*public Cursor getDirectoryList (CharSequence constraint) { 
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); 
    queryBuilder.setTables(
     CBDataBaseHelper.DATABASE_TABLE 
    ); 

    String asColumnsToReturn[] = { 
      CBDataBaseHelper.DATABASE_TABLE + "." 
      + CBDataBaseHelper.KEY_NAME 
    }; 

    if (constraint == null || constraint.length() == 0) { 
     // Return the full list 
     return queryBuilder.filter(, asColumnsToReturn, null, null, 
       null, null, null); } 
    else { 
     String value = "%"+constraint.toString()+"%"; 

     return data.query(CBDataBaseHelper.DATABASE_TABLE, asColumnsToReturn, "LAST_NAME like ? ", new String[]{value}, null, null, null); 
    } 
}*/ 

public void CreateNew(View view){ 

    Intent myIntent = new Intent(this, CBCreate.class); 
    startActivity(myIntent); 
} 

@Override 
public void onListItemClick(ListView parent, View v, int position, long id) { 
    super.onListItemClick(parent, v, position, id); 
    Intent intent1 = new Intent(this, CBCreate.class); 
    long rowId = cursor.getLong(cursor.getColumnIndex(CBDataBaseHelper.KEY_ROWID)); 
    String s = String.valueOf(rowId); 
    intent1.putExtra("SELECTED", s); 
    startActivity(intent1); 
} 


} 

回答

0

我不是伟大的SQLite的,但我认为,如果你只是把你的过滤器 查询它应该只吐回你想要的东西。

public Cursor findRecipe(String filter) { 
    return db.query("myrecipetable", null, 
     "rec_recipecolumn LIKE" + filter, null, null, null, null); 
} 

然后,只需调整这个你需要覆盖的所有表。

+0

对不起,这个光标与我的代码相关? – aspiringCoder

+0

你是什么意思?我从哪里得到[光标]?你把这个方法放在哪里? – AedonEtLIRA

+0

是的方法存储在哪里?在适配器类中?数据库帮助类还是这个? – aspiringCoder