[英]How to set a button to search in database in Android ?
我已經搜索了很長時間。 我剛剛發現,關於連接數據庫,使用PHP檢索數據,然后將數據傳遞到Android應用並將所有數據顯示為列表視圖的教程如此之多。但是,很少有什么信息可以教您如何過濾數據並僅顯示所需數據而不是全部。 例如,我在編輯文本框中鍵入“ XXX”,然后按“搜索”按鈕,結果僅顯示與XXX相關的數據。
我成功地使用php連接了數據庫以grep數據庫表中的所有數據,現在我正在考慮如何根據用戶鍵入的搜索要求使用php中的數據grep並將其顯示為android應用中的listview 。
接下來我該怎么辦? 請幫助,非常感謝。
我想過濾從數據庫接收的數據,以便可以過濾整個列表,執行列表以及過濾正確的項目。 但是我認為最好的方法是從數據庫中選擇正確的數據,這樣就可以創建並執行查詢。 以下示例過濾了18歲以上的污染物質並按名稱排序。 這個簡單的示例使用SQLiteOpenerHelper,請檢查此鏈接http://developer.android.com/training/basics/data-storage/databases.html 。
public List<Contact> findContactsByAge() {
List<Contact> contacts = new ArrayList<String>();
final String query = "SELECT * FROM contact c "
" WHERE c.age > 18 AND "
" ORDER BY c.name";
final Cursor cursor = database.rawQuery(query, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Contact contact = new Contact();
contact.setName(cursor.getString(0));
contact.setAge(cursor.getString(1));
contacts.add(contact);
cursor.moveToNext();
}
cursor.close();
return contacts;
}
希望我的解釋對您有所幫助!
我在簡單的listview中對示例數據實現了自定義搜索。 您也可以使用帶有自定義適配器的自定義listview來實現此邏輯。 您可以將上述方法的所有聯系結果放入代碼中的arralist變量下面。無需通過單擊單獨的按鈕進行額外的單擊。
MainActivity.java
package com.example.examplesearch;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends ActionBarActivity {
ArrayAdapter<String> adapter1 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView list1 = (ListView) findViewById(R.id.list1);
final EditText search = (EditText) findViewById(R.id.search);
final ArrayList<String> arraylist = new ArrayList<String>();
arraylist.add("Balvier");
arraylist.add("Sudhier");
arraylist.add("Abhinay");
arraylist.add("Amit");
arraylist.add("Dilip");
final ArrayList<String> newArraylist = new ArrayList<String>();
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getApplicationContext(),
android.R.layout.simple_dropdown_item_1line, arraylist);
newArraylist.clear();
list1.setAdapter(adapter);
search.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
newArraylist.clear();
for (int i = 0; i < arraylist.size(); i++) {
if (search.getText().length() <= arraylist.get(i).length()) {
if (search
.getText()
.toString()
.equalsIgnoreCase(
(String) arraylist.get(i).subSequence(
0, search.getText().length()))) {
newArraylist.add(arraylist.get(i).toString());
}
}
}
adapter1 = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_dropdown_item_1line,
newArraylist);
list1.setAdapter(adapter1);
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
});
}
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.examplesearch.MainActivity" >
<EditText
android:id="@+id/search"
android:layout_width="match_parent"
android:layout_height="50dp" />
<ListView
android:id="@+id/list1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:layout_below="@+id/search"/>
</RelativeLayout>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.