PDA

View Full Version : رخ دادن یک رویداد زمان تغییر EditText



mrtzxxx
سه شنبه 26 فروردین 1393, 21:36 عصر
با سلام خدمت دوستان. میخوام وقتی محتویات داخل یک EditText توسط کاربر تغییر میکنه یک رویدادی اتفاق بیوفته (مثلا به روز شدن لیست ویو) چه طور باید اینکارو انجام بدم؟ و اینکه وقتی کاربر مثلا حرف "ب" رو میزنه تمامی گزینه های لیست ویو که با حرف "ب" شروع میشه بیاد پشت هم. اینو چه طوری انجام بدم؟ (لیست ویو هم از بانک اطلاعاتی خونده میشه)

smemamian
سه شنبه 26 فروردین 1393, 21:54 عصر
سلام. جواب 2 سوال شما یکی است.
از addTextChangedListener استفاده کنید بدین صورت :

edittext.addTextChangedListener(new TextWatcher() {

@SuppressLint("DefaultLocale")
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
String text = edittext.getText().toString().toLowerCase(Locale.g etDefault());
//barresi kon bebin text khali hast ya na aghay @mrtzxxx
adapter.filterTitle(text);
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub

}

@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub

}
});

و تابع filterTitle رو باید در Adapter تعریف کنید برای مثال :

public void filterTitle(String title){

listData.clear();
if(title.length() == 0)
listData.addAll(templistData);
else{
for(NewsItem newsitem : templistData){
if(newsitem.getHeadline().toLowerCase(Locale.getDe fault()).contains(title)){
listData.add(newsitem);
}
}
}

notifyDataSetChanged();
}

که در اینجا listData، لیست واقعی داده های شما است و templistData
یک لیست موقت هست که در Adapter باید تعریف کنید:

private List<NewsItem> listData = null;
private ArrayList<NewsItem> templistData ;