Android Search Activity - PullRequest
       3

Android Search Activity

1 голос
/ 13 февраля 2012

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

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

Каков наилучший способ сделать это? Кто-нибудь может сослаться на хороший сайт с примерами или объяснить, как это работает?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Это не так просто, как может показаться, но достаточно просто. Вы хотите, чтобы ваш адаптер (вам нужен собственный адаптер) реализовывал интерфейс Filterable. Затем, когда вы выполняете фильтрацию, вы выполняете запрос в базе данных и возвращаете обновленные результаты, вызывая notifyDatasetChanged(). Я не смог быстро найти хороший пример, но этот достаточно хорош.

После этого вам необходимо «подключить» как фильтр адаптера, так и EditText. Добавьте TextWatcher в EditText и в afterTextChanged() вызовите getFilter().filter(theText).

Это более или менее.

1 голос
/ 13 февраля 2012

См. Эту демонстрацию.

Я реализовал ListView с функциями поиска на основе текста, введенного в EditText.

@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    searchTextLength = searchEditText.getText().length();
    m_orders.clear();
    m_orders = new ArrayList<SearchData>();
    //SearchData o1 = new SearchData();
    SearchData o[]=new SearchData[search_list.length];
    for(int i=0; i<search_list.length; i++)
    {
        if(searchTextLength <= search_list[i].length())
        {
            if(searchEditText.getText().toString().equalsIgnoreCase((String) search_list[i].subSequence(0, searchTextLength)))
            {
                o[i]=new SearchData();
                o[i].setTitleName(search_list[i]);
                o[i].setsubTitleName(subTitle_list[i]);
                m_orders.add(o[i]);
            }
        }
    }

    this.m_adapter = new OrderAdapter(this, R.layout.search_row, m_orders);
    lv.setAdapter(this.m_adapter);
    m_adapter.notifyDataSetChanged();
    //getOrders();

    //lv1.setAdapter(new ArrayAdapter<String>(SearchActivity.this,R.layout.search_layout , arr_sort));
}

Надеюсь, это поможет вам в вашем состоянии.

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