Поиск по ListActivity

295
07 марта 2018, 07:40

Как добавить ActionBar в ListActivity и сделать в нем SearchWidget, вернее выполнить поиск элементов по списку(как поиск в плей маркете)?

Код ListActivity:

 public class MyListActivity extends ListActivity {
String data[] = new String[]{"Элемент1", "Элемент2", "Элемент3", 
"Элемент4","Элемент5"};
int images[] = new int[]{R.drawable.image1, R.drawable.image2,
        R.drawable.image3, R.drawable.image4, R.drawable.image5};

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    List<HashMap<String, String>> list = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        HashMap<String, String> hm = new HashMap<>();
        hm.put("keyText", data[i]);
        hm.put("keyImage", Integer.toString(images[i]));
        list.add(hm);
    }
    String[] from = {"keyImage", "keyText"};
    int[] to = {R.id.image1, R.id.text1};
    SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.item_list, from, to);
    setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    chooseActivity(position);
}

private void chooseActivity(int position) {
    switch (position) {
        case 0:
            startActivity(new Intent(this, ActivityName.class));
            break;
           //...
    }
}
}
Answer 1

Чтобы экшенбар появился в ListActivity, в качестве темы приложения необходимо использовать одну из Holo или Material (для API21 и выше) тем с экшенбаром, например android:Theme.Holo.

Создаем меню с виджетом поиска (res/menu/main_menu.xml):

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/search"
        android:title="search"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="collapseActionView|always"
        android:actionViewClass="android.widget.SearchView" />
</menu>

в код активити добавляем метод обработки экшенбара и поиска:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            searchView.clearFocus();
            return true;
        }
        @Override
        public boolean onQueryTextChange(String newText) {
            adapter.getFilter().filter(newText);
            return false;
        }
    });
    return super.onCreateOptionsMenu(menu);
}

объект adapter выносим в поле класса, чтобы к нему имелся доступ в методе меню:

public class MainActivity extends ListActivity {
    SimpleAdapter adapter;
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        adapter = new SimpleAdapter(this, list, R.layout.list_item, from, to);
        ...
    }
}
READ ALSO
OAuth2 авторизация для Standalone

OAuth2 авторизация для Standalone

Все статьи про OAuth2, которые хоть как-то упоминают Standalone говорят лишь "перехватите как-нибудь код авторизации и отправьте POST запрос для получения...

232
Аналог Pygame, но для Java

Аналог Pygame, но для Java

Нужен простой игровой движок для JavaПринцип роботы должен быть как у Pygame - просто методы отрисовки и обработки столкновений, возможно работа...

271
Потоки в JavaFX

Потоки в JavaFX

Есть фрагмент кода:

422
Selenium Webdriver + jQuery локаторы

Selenium Webdriver + jQuery локаторы

Доброго времени сутокМо;но ли как-то в Selenium Webdriver реализовать метод поиска по jquery локаторам? Может быть есть подключаемая библиотека, или...

256