इम के माध्यम से ListView फिल्टर करने के लिए और मैं किताब लेकिन हर है कि आप edittext में एक शब्द या वाक्य डाल यह पुस्तकों की सामग्री खोज करेंगे के शीर्षक फ़िल्टर करना चाहते हैं कैसे ... किसी ने मुझे इस के साथ मदद कर सकते हैं ...एंड्रॉयड के लिए आवेदन की तरह एक eBook बनाने EditText
उत्तर
आप edittext के लिए लिखने textChangedlistener (या) TextWatcher की जरूरत है। श्रोता के अंदर आपको खोज तर्क लिखने की आवश्यकता है। यहां APIdoc है। यहां textwatcher पर एक उदाहरण दिया गया है।
मैं पहले से ही उस विषय के सभी देखा था, लेकिन इसकी एक नहीं im की तलाश में .. यदि आप जानते हैं आप कृपया मुझे एक चल रहे प्रोग्राम भेज सकते हैं तो मैं देख सकता हूं कि यह करने के लिए उचित है .. धन्यवाद – Mordiggian
यह एक कोशिश है, जब भी यू edittext में पाठ दर्ज करें, सूची से फ़िल्टर परिणाम दिखाई देंगे के रूप में मैं छवियों में सामान
प्रारंभिक से पता चला है:
छानने :
इस main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/etSearchbox"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<ListView
android:id="@+id/lvFirst"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></ListView>
</LinearLayout>
है इस FilterListActivity.java
package com.filterlist;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class FilterListActivity extends Activity{
EditText etSearchbox;
ListView lvFirst;
ArrayAdapter<String> adapter1;
String[] data = {"mehul joisar","amit mishra","amitabh","Aamir khan","jesica","katrina"};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etSearchbox=(EditText)findViewById(R.id.etSearchbox);
lvFirst=(ListView)findViewById(R.id.lvFirst);
lvFirst.setTextFilterEnabled(true);
adapter1 = new ArrayAdapter<String>(FilterListActivity.this, android.R.layout.simple_list_item_1, data);
lvFirst.setAdapter(adapter1);
etSearchbox.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
FilterListActivity.this.adapter1.getFilter().filter(arg0);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
}
यह बहुत अच्छा है! लेकिन मैं इसे थोड़ा अलग करना चाहता हूं। मेरे पास शीर्ष 10 cties की सूची के लिए एक एडाप्टर है (यह एक स्थिर सूची है)। अब जब उपयोगकर्ता edittext बॉक्स में टाइप करता है, तो मैं अपने पास शहरों की दूसरी सूची से फ़िल्टर चाहता हूं। मैं उसे कैसे प्राप्त कर सकता हूं? – Namratha
ok.let मुझे पता है कि आप शहरों की अन्य सूची से फ़िल्टर करने के बाद फ़िल्टर किए गए परिणाम कहां प्रदर्शित करना चाहते हैं? –
है मैं एक काम उदाहरण है, इस प्रयास करें:
filterEditText = (EditText)findViewById(R.id.filter);
filterEditText.addTextChangedListener(filterTextWatcher);
TextWatcher filterTextWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
}
public void onTextChanged(CharSequence s, int start, int before,int count) {
adapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
एडाप्टर चाहिए implements Filterable
@Override
public Filter getFilter() {
// Filter filter = null;
if(filter == null)
filter = new CheeseFilter();
return filter;
}
और फिल्टर वर्ग:
public class CheeseFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
// TODO Auto-generated method stub
constraint = constraint.toString().toLowerCase();
FilterResults newFilterResults = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<String> auxData = new ArrayList<String>();
for (int i = 0; i < data.size(); i++) {
if (data.get(i).toLowerCase().contains(constraint))
auxData.add(data.get(i));
}
newFilterResults.count = auxData.size();
newFilterResults.values = auxData;
} else {
newFilterResults.count = data.size();
newFilterResults.values = data;
}
return newFilterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<String> resultData = new ArrayList<String>();
resultData = (ArrayList<String>) results.values;
EfficientAdapter adapter = new EfficientAdapter(context, resultData);
list.setAdapter(adapter);
// notifyDataSetChanged();
}
}
आप अधिक जानकारी के लिए इस पोस्ट की जाँच कर सकते हैं:
इस पोस्ट को देख http://stackoverflow.com/questions/1645209/ कैसे-कर सकते हैं-ए-फिल्टर-सूचीदृश्य-डेटा-जब टाइपिंग-ऑन-edittext में एंड्रॉयड –
मैं थोड़ी देर के लिए इस पर अटक गया था, और कुछ उत्तर खुलकर जटिल पाया है, तो अंत में एक सरल जवाब यहां पोस्ट: http://stackoverflow.com/questions/ 17720481/कैसे-सका-ए-फिल्टर-सूचीदृश्य-का उपयोग कर-baseadapter/36032382 # 36032382 –