#android #listview
#Android #listview
Вопрос:
Я пытаюсь выбрать элемент в на ListView
основе значения, которое я получаю из намерения. Я пробовал ListView.setSelection
, но это не работает.
Intent i = this.getIntent();
String sp = i.getStringExtra("Sport");
for (int position = 0; position < sports.length; position )
if (sports[position].equals(sp)) {
listView.setSelection(position);
}
Вот остальная часть кода для контекста:
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sport_item);
ListView listView = findViewById(R.id.listview);
String[] sports = new String[] {
"Soccer",
"Running",
"Swimming",
"Volleyball",
"Tennis"
};
ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.listview, R.id.textView, sports);
listView.setAdapter(arrayAdapter);
Button btnSelect = findViewById(R.id.btnSelect);
listView.setChoiceMode(listView.CHOICE_MODE_SINGLE);
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ListView.getCheckedItemPosition() != -1) {
Intent i = new Intent(SportActivity.this, InformationActivity.class);
i.putExtra("Sport", sports[listView.getCheckedItemPosition()]); |
i.putExtra("Position", listView.getCheckedItemPosition());
setResult(Activity.RESULT_OK, i);
finish();
} else
Toast.makeText(SportActivity.this, "Ban chua lya chon", Toast.LENGTH_SHORT).show();
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(SportActivity.this, "Sport selected :" sports[i], Toast.LENGTH_SHORT).show();
}
});
Intent i = this.getIntent();
String sp = i.getStringExtra("Sport");
for (int position = 0; position < sports.length; position )
if (sports[position].equals(sp)) {
listView.setSelection(position);
}
}
Ответ №1:
покажите больше кода, разместите его здесь. вы должны вызывать setSelected
только после настройки адаптера, прежде чем в списке не будет содержимого, поэтому ничего не будет выбрано
в вашем случае ваша проблема вызвана, вероятно, сравнением String
s с ==
operator . в Java он сравнивает объекты, и один, полученный из intent
, и второй из массива, не являются одинаковыми объектами, даже если они имеют одинаковое содержимое (они по-прежнему представляют собой два объекта в двух отдельных местах, размещенных в памяти). используйте equals
метод для сравнения только содержимого
if(sports[position].equals(sp))
Комментарии:
1. Я добавил код. я изменил == -> равно, но это все то же самое
2. попробуйте поместить
listView.setSelection
внутрьnew Runnable
и установить его с помощьюlistView.post()
метода. или вы можете переместить весь код с первого экрана (раздел, начинающийся со строки сgetIntent()
) вonResume
метод3. и никогда не публикуйте скриншоты вашего кода, публикуйте его в виде текста, о котором идет речь, чтобы его можно было легко выбрать и скопировать для дальнейших изменений / исправлений при ответе на вопросы (как у меня)