Stack Overflow на русском Asked by BLCK4 on January 4, 2021
Как правильно обработать нажатие в ListView что бы открывалась активити не по position а по id допустим, т.к. он у меня в поиске.
Проблема в том что при поиске открывается совсем другая активити. Спасибо заранее!)
public class Search extends AppCompatActivity {
String[] items;
ArrayList<String> listItems;
ArrayAdapter<String> adapter;
ListView listView;
EditText editText;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
listView=(ListView)findViewById(R.id.listview);
editText=(EditText)findViewById(R.id.txtsearch);
initList();
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().equals("")){
// reset listview
initList();
} else {
// perform search
searchItem(s.toString());
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
switch (position) {
case 0:
intent = new Intent(Search.this, SystemJS.class); //Заполняем Intent
break;
case 1:
intent = new Intent(Search.this, SD.class); //Заполняем Intent
break;
case 2:
intent = new Intent(Search.this, NR.class); //Заполняем Intent
break;
case 3:
intent = new Intent(Search.this, OD.class); //Заполняем Intent
break;
case 4:
intent = new Intent(Search.this, OP.class); //Заполняем Intent
break;
case 5:
intent = new Intent(Search.this, NJ.class); //Заполняем Intent
break;
case 6:
intent = new Intent(Search.this, MainActivity.class); //Заполняем Intent
break;
case 7:
intent = new Intent(Search.this, PD.class); //Заполняем Intent
break;
case 8:
intent = new Intent(Search.this, PD2.class); //Заполняем Intent
break;
case 9:
intent = new Intent(Search.this, PK.class); //Заполняем Intent
break;
}
startActivity(intent); //Запускаем активность
}
});
}
public void searchItem(String textToSearch){
for(String item:items){
String textToSearch1 = textToSearch.toLowerCase();
if(!item.toLowerCase().contains(textToSearch1)){
listItems.remove(item);
}
}
adapter.notifyDataSetChanged();
}
public void initList(){
items=new String[]{"Java","JavaScript","C#","PHP", "С++", "Python", "C", "SQL", "Ruby", "Objective-C"};
listItems=new ArrayList<>(Arrays.asList(items));
adapter=new ArrayAdapter<String>(this, R.layout.search_item, R.id.txtitem, listItems);
listView.setAdapter(adapter);
}
}
Нужно изменить модель данных так, чтобы каждый элемент содержал свой id
- вместо простых строк использовать собственный класс с полями "name" и "id".
В данном примере так же можно идентифицировать по самой строке, благо в качестве ключей для switch
их тоже можно использовать:
String name = (String) parent.getItemAtPosition(position);
switch (name) {
case "Java":
intent = new Intent(Search.this, SystemJS.class); //Заполняем Intent
break;
case "JavaScript":
intent = new Intent(Search.this, SD.class); //Заполняем Intent
break;
case "C#":
intent = new Intent(Search.this, NR.class); //Заполняем Intent
break;
...
Correct answer by woesss on January 4, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP