جستجو در لیست ویو پرشده از دیتابیس
با سلام
اگه ما چند تا طبقه بندی برای مطالبمون داشته باشیم ، چطوری میتونیم امکان جست و جو بین مطالب کل نرم افزار رو قرار بدیم ؟
اگه تو ویدئویی استاد در این مورد صحبت کردن ، ممنون میشم بگید کدوم ویدئو هست .
با تشکر از همه مهندسا
سلام. تصور کنید من چند نوع موضوع دارم . مثلا : ورزشی ، علمی، هنری ، مذهبی
تو هر کدوم از این موضوع ها ، یه سری مطالب نوشته شده.
حالا نرم افزار من یه گزینه جست و جو داره. کاربر کلمه ی "فوتب" رو مینویسه.(یعنی در حال نوشتن کلمه فوتبال هست) تمام صفحات از بین این متن های ذخیره شده که کلمه ی فوتب رو دارن Title هاشون برای کاربر لیست میشه. چطوری میتونم این کار رو انجام بدم؟
شما یک ادیت باکس ایجاد کن و اون رو در فایل جاوا معرفی کن و بعد مثل setOnClickListener از addTextChangedListener استفاده کن. مثل کد پایین که برای یک Adapter لیست ویو استفاده شده:
public class ActivityMain extends Activity {
public ArrayAdapter adapter;
@Override
protected void onResume() {
G.currentActivity = this;
super.onResume();
if (adapter != null) {
adapter.notifyDataSetChanged();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lstContent = (ListView) findViewById(R.id.lstContent);
EditText edtSearch = (EditText) findViewById(R.id.edtSearch);
adapter = new AdapterNote(G.notes);
lstContent.setAdapter(adapter);
adapter.notifyDataSetChanged();
edtSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int start, int before, int count) {
ActivityMain.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence cs, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable cs) {
// TODO Auto-generated method stub
}
});
}
}
البته نمیدونم مشکل کجاست. چون متاسفانه این کد در لیست ویوهایی که از آرایه داینامیک دارن اطلاعات میگیرن درست جواب نمیده ولی روی آرایههای استاتیک کامل جواب میده. اگر شما راه حلی دیگهای پیدا کردید ممنون میشم اینجا مطرحش کنید.
Cursor cursor = database.rawQuery("SELECT * FROM content WHERE title LIKE '%"
+Place.edtSearch.getText().toString();+ "%'", null);
دوستان چنین دستوری رو من نوشتم . اما خطا میگیره . میدنید مشکلش کجاست؟
بانوی شرقی عزیز ، ببین این نوع سرچ کمکت میکنه :
تابع سرچ :
public String search(int row, int col, String word, String field) {
Cursor cursor1 = null;
if (field.equals("Name")) {
cursor1 = mydb.rawQuery("select * from نام جدول where " + field + " like '" + word + "%'", null);
}
cursor1.moveToPosition(row);
String save = cursor1.getString(col);
return save;
}
وقتی روی ادیت باکست کلیک شد :
edt_searchbox.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
fetch(edt_searchbox.getText().toString(), "Name");
}
@Override
public void afterTextChanged(Editable arg0) {}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
});
تابع fetch:
private void fetch(String text1, String field) {
db.open();
int s = db.count_search(text1, field);
Name = new String[s];
for (int i = 0; i < s; i++) {
Name[i] = db.search(i, 1, text1, field);
}
setListAdapter(new AA());
db.close();
}
فیلد name هم اینجا همون فیلدی هست که میخوای براساس اون سرچ رو انجام بدی.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .