In my previous post , I explained on how to copy a SQLite database into the android internal memory .
In this , we will learn how use it to access database dynamically .
Prerequisites :
The basic programming in Android
My Previous Post : Using static database with android
So , once we have followed the previous post , for creating a dynamic search we need to do the following :
Now we need to use this mCursor with a adaptor , Adaptor is what will manage the views of the mCursor
for this example we have used a predefined curson adapter named SimpleCursorAdapter , but if we want we can also define our own cursor adaptors . The comments in the code are self explanatory .
And , the final product :)
You can find the whole project HERE .
Please note : If the link is broken , please mail me @ tapan.d.thaker@gmail.com . And i will put it back soon .
In this , we will learn how use it to access database dynamically .
Prerequisites :
The basic programming in Android
My Previous Post : Using static database with android
So , once we have followed the previous post , for creating a dynamic search we need to do the following :
- Set content view to a search layout that will contain a textbox and a list view
- Create a Cursor which is a more like a ResultSet in java
- Create a Adaptor that will manage the Cursor (to view)
- Set a filter query provider
- Set a text change listener for the edittext which will call the filer set in step 4
- Add a OnItemClickListener which will be clicked when a list item is clicked
STEP 1
Define a file called search.xml in res/layout/ which will be in something like the following
Please note that it is of uttermost importance that the id of the listview is list .
now , in the activity write the following java code:
now , in the activity write the following java code:
setContentView(R.layout.search);
STEP 2
Now , we need to define a Cursor using the following java code :
sql=db.getReadableDatabase(); allcolumns=new String[]{"_id","Firstname||' '||Lastname"}; selection=null; mCursor=sql.query(true, "Contact", allcolumns, selection, null, null, null, null, null); startManagingCursor(mCursor);
STEP 3
Now we need to use this mCursor with a adaptor , Adaptor is what will manage the views of the mCursor
String[] array= {"Firstname||' '||Lastname"}; adapter = new SimpleCursorAdapter(this, // Context. android.R.layout.simple_list_item_1,// Specify the row template // to use (here, two // columns bound to the // two retrieved cursor // rows). mCursor, // Pass in the cursor to bind to. // Array of cursor columns to bind to. array, // Parallel array of which template objects to bind to those // columns. new int[] { android.R.id.text1});
for this example we have used a predefined curson adapter named SimpleCursorAdapter , but if we want we can also define our own cursor adaptors . The comments in the code are self explanatory .
STEP 4
Now we need to define a filter Query Provider which will run a Query on a given character sequence
adapter.setFilterQueryProvider(new FilterQueryProvider() { @Override public Cursor runQuery(CharSequence s) { selection="Firstname||' '||LastName like '"+s+"%'" ; Log.d("Selection Query",selection); Cursor c=sql.query(true, "Contact", allcolumns, selection, null, null, null,null,null); return c; } });
STEP 5
Once the FilterQueryProvider has been defined , the next question arises is when should the filter be executed . So , we know that filter should be executed when the text in editText is change , so :
et.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) { adapter.getFilter().filter(s); } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { } @Override public void afterTextChanged(Editable editable) { } });
STEP 6
Last , but not the least , set a on Item Click Listener which will be executed when a item in the list is clicked :
l1=(ListView) findViewById(R.id.list); l1.setAdapter(adapter); l1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { Toast.makeText(SqlliteDatabaseSearchActivity.this, arg3+" ", 50).show(); } });
And , the final product :)
You can find the whole project HERE .
Please note : If the link is broken , please mail me @ tapan.d.thaker@gmail.com . And i will put it back soon .
No comments:
Post a Comment