Как добавить поиск в список просмотра Android, сортировать элементы по типу U - PullRequest
0 голосов
/ 28 декабря 2011

У меня есть представление списка с панелью поиска, я хочу сортировать элементы по мере ввода текста в тексте редактирования.Я пытался сделать это целый день, но не смог завершить, можете ли вы, ребята, помочь мне сделать это.я был бы вам благодарен заранее спасибо

Ответы [ 4 ]

5 голосов
/ 28 декабря 2011

пожалуйста, используйте этот код

package com.android.swfPlayer;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class SwfAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    private EditText edtField;
    ListView l1;
    ArrayList<String> array = new ArrayList<String>();
    ArrayList<String> type_name_copy = new ArrayList<String>();
    String[] array1 = { "abd", "bcd", "cdg", "sada", "fs", "fsf", "fsf" };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        array.add("abd");
        array.add("bcd");
        array.add("cdg");
        array.add("sada");
        array.add("abd");
        array.add("fs");
        array.add("fsf");
        array.add("afsf");

        l1 = (ListView) findViewById(R.id.listView1);
        edtField = (EditText) findViewById(R.id.editText1);
        listUpdate(array);

        edtField.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

            @Override
            public void afterTextChanged(Editable theWatchedText) {
                ArrayList<String> type_name_filter = new ArrayList<String>();

                String text = theWatchedText.toString();

                for (int i = 0; i < array.size(); i++) {

                    if ((array.get(i).toLowerCase()).contains(text
                            .toLowerCase())) {
                        type_name_filter.add(array.get(i));

                    }
                }

                type_name_copy = type_name_filter;

                listUpdate(type_name_copy);
            }
        });

    }

    public void listUpdate(ArrayList<String> data) {
        l1.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, data));

    }
}
2 голосов
/ 28 декабря 2011

Вы должны установить адаптер, используя lv.setAdapter (this.adapter), когда afterTextChanged.

@Override
public void afterTextChanged(Editable s) {
//adapeter should be member variable
           lv.setAdapter(this.adapter)
}
1 голос
/ 28 декабря 2011
data = new ArrayList<Item>(10);
    data.add(new Item(100, "Sample Food1"));
    data.add(new Item(110, "Sample Food2"));
    data.add(new Item(120, "Sample Food3"));
    data.add(new Item(130, "Sample Food4"));
    data.add(new Item(140, "Sample Food5"));
    data.add(new Item(150, "Sample Food6"));
    data.add(new Item(160, "Sample Food7"));
    data.add(new Item(170, "Sample Food8"));
    data.add(new Item(180, "Sample Food9"));
    data.add(new Item(190, "Sample Food10"));
    data.add(new Item(200, "Sample Food11"));
    data.add(new Item(210, "Sample Food12"));
    Collections.sort(data, new Comparator<Item>()
        {
            public int compare(Item i1, Item i2) 
            {
                return i1.getCaption().compareTo(i2.getCaption());
            }
        });
    adapter = new ItemListAdapter(this, data);
0 голосов
/ 20 мая 2014
Use combination of methods startsWith() and contains().


public void onTextChanged(CharSequence str, int start, int before,
                    int count) {



                array_sort.clear();
                for (int i = 0; i < myList.size(); i++) {


                        String tex_inlist = myList.get(i).getTitle()
                                .toLowerCase();

                        if (tex_inlist.startsWith(str)) {
                            array_sort.add(0,myList.get(i));//add to the begining of list

                        }
                        else if(tex_inlist.contains(str)){
                            array_sort.add(myList.get(i));//add to the end of list

                        }

                }



                RateArrayAdapter new_adapter = new RateArrayAdapter(
                        (Activity) context, array_sort);
                lvDetail.setAdapter(new_adapter);

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...