Здравствуйте. Столкнулся с проблемой реализации поиска по списку. Пример кода я нашел в интернете, а вот как интегрировать этот код под своё приложение, я понять не могу(начинающий разработчик). Можете ли вы тыкнуть на ошибку(-и)? Вот код :
public class PhonesListMainActivity extends AppCompatActivity {
private List<PhonesLists> phones = new ArrayList();
ListView phonesList;
ArrayList<String> phone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phones_list_main);
// начальная инициализация списка
setInitialData();
//получаем элемент ListView
phonesList = (ListView) findViewById(R.id.phonesList);
// создаем адаптер
PhonesAdapter phonesAdapter = new PhonesAdapter(this, R.layout.activity_phones_lists, phones);
// устанавливаем адаптер
phonesList.setAdapter(phonesAdapter);
//слушатель выбора в списке
ListView phonesList = (ListView) findViewById(R.id.phonesList);
phonesList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
Intent intent = new Intent(view.getContext(), PixelActivity.class);
startActivityForResult(intent, 0);
}
if (position == 1){
Intent intent = new Intent(view.getContext(), GalaxyS8.class);
startActivityForResult(intent, 0);
}
if (position == 2){
Intent intent = new Intent(view.getContext(), IphoneActivity.class);
startActivityForResult(intent, 0);
}
if (position == 3){
Intent intent = new Intent(view.getContext(), G6.class);
startActivityForResult(intent, 0);
}
if (position == 4){
Intent intent = new Intent(view.getContext(), Nexus5x.class);
startActivityForResult(intent, 0);
}
}
});
}
// Cписок
private void setInitialData() {
phones = new ArrayList<>();
phones.add(new PhonesLists("Model : Google Pixel", "By Google",R.drawable.pixelforlist));
phones.add(new PhonesLists("Model : Galaxy S8", "By Samsung",R.drawable.s8forlist));
phones.add(new PhonesLists("Model : Iphone 7", "By Apple",R.drawable.iphone7forlist));
phones.add(new PhonesLists("Model : G6", "By LG",R.drawable.g6forlist));
phones.add(new PhonesLists("Model : Nexus 5x", "By LG",R.drawable.nexus5xforlist));
}
// ActionBar меню
// Поиск
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_items, menu);
MenuItem searchItem = menu.findItem(R.id.item_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
ArrayList<String> phlist = new ArrayList<String>();
for (String ph : phone) {
if (ph.toLowerCase().contains(newText.toLowerCase())) {
phlist.add(ph);
}
}
PhonesAdapter phonesAdapter = new PhonesAdapter(PhonesListMainActivity.this, R.layout.activity_phones_lists, phones);
// устанавливаем адаптер
phonesList.setAdapter(phonesAdapter);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
// Элементы меню
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.settings:
Toast.makeText(this, "Sorry, there is nothing here yet. Stay tuned.", Toast.LENGTH_SHORT).show();
return true;
}
switch (item.getItemId()){
case R.id.item_about:
Intent intent = new Intent(this, AboutAcivity.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
}
Вот его layout " activity_phones_list_main " : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ListView
android:id="@+id/phonesList"
android:layout_width="match_parent"
android:layout_height="match_parent" />
А это menu.xml : <menu xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/settings"
android:icon="@drawable/ic_settings_black_24dp"
android:orderInCategory="1"
android:title="@string/item_settings" />
<item
android:id="@+id/item_about"
android:orderInCategory="1"
android:title="@string/item_about"
android:showAsAction="never"/>
<item
android:id="@+id/item_search"
android:icon="@drawable/ic_action_search"
android:title="Search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
</menu>
Надеюсь так будет понятно. Так вот, проблема в том, что когда нажимаешь на кнопку поиска, то приложение вылетает ? :
и ещё, как можно сделать так, чтобы поиск был только на странице со списком, а не на всех activity :
Заранее спасибо!)