У меня есть список, заполненный json-объектами, извлеченными из URL-адреса с использованием модернизации.
Каждый объект имеет страницу сведений, которая отображается при нажатии на объект.
Как выполнить поиск объектов в списке и, щелкнув по результату, отобразится правильный объект с его страницей сведений?
Я уже пробовал searchview с тем, что, как я предполагаю, является только фильтром, а не реальным поиском, потому что он показывает только объекты, соответствующие моей вставленной поисковой строке, но когда я нажимаю на отфильтрованный объект, он все равно дает мне элемент, первоначально указанный на этом положение.
открытый класс SearchTafelnActivity расширяет AppCompatActivity {
SearchView sv;
private List<TafelnCall> tafelItems;
private ArrayAdapter<String> adapter;
private ProgressBar progressBar;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
return true;
}
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
progressBar = findViewById(R.id.pBar);
progressBar.setVisibility(View.VISIBLE);
handleIntent(getIntent());
/*final SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.onActionViewExpanded();
searchView.setIconified(true);
searchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchView.setIconified(false);
}
});*/
BottomNavigationView navigation = findViewById(R.id.bot_nav);
BottomNavigationViewHelper.disableShiftMode(navigation);//Dont forgot this line
Menu menu = navigation.getMenu();
MenuItem menuitem = menu.getItem(3);
menuitem.setChecked(true);
//Switch activities
navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()){
case R.id.nav_home:
Intent intent0 = new Intent(SearchTafelnActivity.this, MainActivity.class);
startActivity(intent0);
break;
case R.id.nav_news:
Intent intent1 = new Intent(SearchTafelnActivity.this, NewsActivity.class);
startActivity(intent1);
break;
case R.id.nav_money:
Intent intent2 = new Intent(SearchTafelnActivity.this, DonateActivity.class);
startActivity(intent2);
break;
case R.id.nav_search:
/*Intent intent3 = new Intent(SearchTafelnActivity.this, SearchTafelnActivity.class);
startActivity(intent3);*/
break;
}
return false;
}
});
final ListView listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TafelnCall tafelitem = tafelItems.get(position);
Intent intent = new Intent(SearchTafelnActivity.this, TafelDetailPage.class);
String tName = tafelitem.getName();
String tAdress = tafelitem.getAddress();
String tContact = tafelitem.getContactPerson();
String tPhone = tafelitem.getPhone1();
String tMail = tafelitem.getEmail();
String tLong = tafelitem.getLongitude();
String tLat = tafelitem.getLatitude();
String tStreet = tafelitem.getAddress();
String tZip = tafelitem.getZip();
intent.putExtra( "key_tName", tName);
intent.putExtra( "key_tAdress", tAdress);
intent.putExtra( "key_tContact", tContact);
intent.putExtra( "key_tPhone", tPhone);
intent.putExtra( "key_tMail", tMail);
intent.putExtra("key_tLong", tLong );
intent.putExtra("key_tLat", tLat);
intent.putExtra("key_tStreet", tStreet);
intent.putExtra("key_tZip", tZip);
startActivity(intent);
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
Api api = retrofit.create(Api.class);
Call<List<TafelnCall>> call = api.getTafeln();
call.enqueue(new Callback<List<TafelnCall>>() {
@Override
public void onResponse(Call<List<TafelnCall>> call, Response<List<TafelnCall>> response) {
tafelItems = response.body();
final String [] tafelNames = new String[tafelItems.size()];
for(int i =0; i< tafelItems.size(); i++){
final TafelnCall tafelnCall = tafelItems.get(i);
tafelNames[i] = tafelnCall.getName();
/*tafelNames[i] = tafelnCall.getAddress();
tafelNames[i] = tafelnCall.getAddressAdd();
tafelNames[i] = tafelnCall.getCarrier();
tafelNames[i] = tafelnCall.getCategory();
tafelNames[i] = tafelnCall.getCity();*/
}
adapter = new ArrayAdapter<>(
getApplicationContext(),
R.layout.listitem,
tafelNames
);
listView.setAdapter(adapter);
progressBar.setVisibility(View.GONE);
//Search function start
sv = findViewById(R.id.searchView);
sv.setQueryHint("Suche");
sv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sv.setIconified(false); //makes whole searchview clickable
}
});
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String text) {
return false;
}
@Override
public boolean onQueryTextChange(String text) {
adapter.getFilter().filter(text);
return false;
}
});
////Search function end
}
@Override
public void onFailure(Call<List<TafelnCall>> call, Throwable t) {
Toast.makeText(getApplicationContext(), "Fehler beim Laden", Toast.LENGTH_SHORT).show();
}
});
}
private void handleIntent(Intent intent) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
//use the query to search your data somehow
}
}
}