Ho un ListView
. Ogni riga contiene 3 TextView
e 2 Button
. Sopra di esso ho un EditText
. Come posso filtrare il mio ListView
con il valore nel primo TextView
di ogni riga?Cerca in ListView con EditText
risposta
creare qualche lista di array per la listview ..E su "AddTextChangeListener" è possibile cercare simile elementi nella lista e caricare un nuovo arraylist per th e testo cercato ...
edittext.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
//search for the keyword and add the items to a new arraylist
}
Il seguente codice utilizza un adattatore di elenco personalizzato.
Ho 3 visualizzazioni di testo visualizzate utilizzando un adattatore di elenco personalizzato. Ho creato un campione che esegue la ricerca in base all'input in editext in cima alla lista. In base al confronto di input viene effettuato con i dati in textview1 di ogni riga e i dati vengono filtrati e visualizzati di conseguenza.
È possibile avere altri elementi nella riga listview e la ricerca può essere basata su texview1/textview2 o textview3. Modifica il seguito in base alle tue esigenze.
public class MainActivity extends Activity {
ArrayList<NewData> mTemp=new ArrayList<NewData>();
ArrayList<NewData> mPostingData=new ArrayList<NewData>();
ArrayList< NewData> mOri = new ArrayList<NewData>();
Myadapter ma;
EditText search;
NewData nd;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for(int i = 0; i < 20; i++)
{
nd=new NewData();
nd.newDatacus.put(NewData.TAG_CUSTOMER_CODE, "i"+i);
nd.newDatacus.put(NewData.TAG_CUSTOMER_NAME, "a"+i);
nd.newDatacus.put(NewData.TAG_CUSTOMER_MOBILE, "number");
nd.newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS, "address");
mOri.add(nd);
}
ma= new Myadapter(MainActivity.this);
mPostingData=mOri;
mTemp=mOri;
ListView lv= (ListView) findViewById(R.id.list);
lv.setAdapter(ma);
search= (EditText) findViewById(R.id.search);
search.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
ma.getFilter().filter(s);
ma.notifyDataSetChanged();
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
}
});
}
class Myadapter extends ArrayAdapter
{
LayoutInflater mInflater;
public void setData(ArrayList<NewData> mPpst) {
mPostingData = mPpst;//contains class items data.
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count >= 0) {
setData((ArrayList<NewData>) results.values);//if results of search is null set the searched results data
} else {
setData(mOri);// set original values
}
notifyDataSetInvalidated();
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults result = new FilterResults();
if (!TextUtils.isEmpty(constraint)) {
constraint = constraint.toString().toLowerCase();
ArrayList<NewData> foundItems = new ArrayList<NewData>();
if(mTemp!=null)
{
for(int i=0;i<mTemp.size();i++)
{
if (mTemp.get(i).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString().contains(constraint)) {
System.out.println("My datas"+mTemp.get(i).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString());
foundItems.add(mTemp.get(i));
}
else
{
}
}
}
result.count = foundItems.size();//search results found return count
result.values = foundItems;// return values
}
else
{
result.count=-1;// no search results found
}
return result;
}
};
}
public Myadapter(Context context) {
super(context, 0);
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// TODO Auto-generated constructor stub
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mPostingData.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(mOri == null){
return null;
}
// When convertView is not null, we can reuse it directly, there is no need
// to reinflate it. We only inflate a new View when the convertView supplied
// by ListView is null.
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list, null);
convertView.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
// Creates a ViewHolder and store references to the two children views
// we want to bind data to.
holder = new ViewHolder();
holder.t1=(TextView) convertView.findViewById(R.id.textView1);
holder.t2 = (TextView) convertView.findViewById(R.id.textView2);
holder.t3 = (TextView) convertView.findViewById(R.id.textView3);
convertView.setTag(holder);
} else {
// Get the ViewHolder back to get fast access to the TextView
// and the ImageView.
holder = (ViewHolder) convertView.getTag();
}
holder.t1.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_CODE).toString());
holder.t2.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_NAME).toString());
holder.t3.setText(mPostingData.get(position).newDatacus.get(NewData.TAG_CUSTOMER_MOBILE).toString());
return convertView;
}
}
class ViewHolder
{
TextView t1,t2,t3;
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
List.xml // XML per gonfiare
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="TextView" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:text="TextView" />
classe NewData
public class NewData {
public static final String TAG_CUSTOMER_CODE = "customer_code";
public static final String TAG_CUSTOMER_NAME = "customer_name";
public static final String TAG_CUSTOMER_MOBILE = "customer_mobile";
public static final String TAG_CUSTOMER_ADDRESS = "customer_address";
Hashtable newDatacus=new Hashtable();
public NewData()
{
newDatacus.put(NewData.TAG_CUSTOMER_CODE,new String());
newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String());
newDatacus.put(NewData.TAG_CUSTOMER_NAME,new String());
newDatacus.put(NewData.TAG_CUSTOMER_MOBILE,new String());
newDatacus.put(NewData.TAG_CUSTOMER_ADDRESS,new String());
}
}
prova il codice sopra e modifica di conseguenza – Raghunandan
- 1. Android: EditText in ListView
- 2. EditText in ListView con windowSoftInputMode adjustPan
- 3. Barra di azione Android Cerca con listview
- 4. Android EditText in ListView - tastiera
- 5. Come filtrare ListView tramite EditText
- 6. EditText in ListView ha perso lo stato
- 7. EditText in ListView senza il riciclaggio dell'ingresso
- 8. Come inserire edittext modificabile in un listview?
- 9. Comportamento strano con selectAllOnFocus quando EditText è in ListView
- 10. Android: EditText perde contenuto sullo scorrimento in ListView?
- 11. Iterate tramite ListView e ottenete i valori del campo EditText
- 12. Filtri + Cerca con Isotopi Breaks Cerca?
- 13. ListView con widget cliccabile/modificabile
- 14. Aggiornamento Android ListView con SimpleCursorAdapter
- 15. Implementazione completamento automatico con ListView in Android
- 16. Cerca nome (testo) con spazi in elasticsearch
- 17. Toolbar con disegno materiale EditText
- 18. Chiamata AJAX con Elasticsearch Cerca
- 19. Cerca classi div con regex
- 20. problema con EditText sfondo (Android)
- 21. testo Cerca in Linq
- 22. cerca in java ArrayList
- 23. Quando si concentra EditText in ListView o RecyclerView, la tastiera mostra ma scorre non funziona
- 24. Cerca in Rails
- 25. Risorse $ NotFoundException in ListView
- 26. C# ListView con ProgressBar
- 27. ListView con il titolo
- 28. ListView con OnItemClickListener android
- 29. ListView con ScrollView orizzontale
- 30. Filter ListView con arrayadapter
http://samir-mangroliya.blogspot.in/2012/05/android-sectioned-listview-with-search_6865.html –
Controllare questo: [-search Android listview] (http://stackoverflow.com/a/5180156/379693) –
cambia "serach" in "cerca" per un riferimento migliore – Tschegewara