Я создаю что-то вроде приложения в блокноте. Одна из возможностей - позволить пользователям выбирать несколько заметок и одновременно удалять их с помощью longclicks, чтобы начать процесс выбора. Пока все работает хорошо, нет никаких физических указаний на выбранные элементы (цвет фона). Использование метода getChildAt(position)
, как показано ниже, помогает мне достичь этого, но проблема заключается в том, когда я прокручиваю вниз, чтобы выявить элементы, не содержащиеся на начальном экране (в зависимости от количества обнаруженных нот), назначение цвета неуместно. Например, если я прокручиваю вниз, чтобы показать два элемента, не содержащихся на экране, при выборе элементов, если я нажимаю на заметку, он выбирается, но цвет фона устанавливается на ноту, расположенную под ней. То же самое происходит, если я прокручу, чтобы открыть 3 ноты и т. Д., Заметки под ними (в зависимости от количества заметок, обнаруженных во время прокрутки) получает цвет, а не выбранную заметку.Настройка цвета фона на элемент списка
Любая помощь была бы очень благодарна. Я только начал работать на платформе Android после того, как был введен в Java на моем нынешнем году университета. Я уверен, что использование пользовательского адаптера будет работать, но я стараюсь, чтобы это было максимально просто для меня. Beneath - это фрагмент моего проекта.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_entries);
//SOME CODES HERE
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, theNamesOfFiles);
entriesView = (ListView) findViewById(R.id.listEntriesView);
entriesView.setAdapter(adapter);
entriesView.setOnItemClickListener(this);
entriesView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
entriesView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
return true;
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
String a = entriesView.getItemAtPosition(position).toString();
//This if statement is necessary because should the user de-selects an item, the system should remove it from the arraylist so they don't get passed to the delete method
if (selectedMenuItems.contains(a)) {
int b = selectedMenuItems.indexOf(a);
selectedMenuItems.remove(b);
itemSelectedCount = selectedMenuItems.size();
mode.setTitle(itemSelectedCount + " Item(s) Selected");
View view = entriesView.getChildAt(position);
view.setBackgroundColor(Color.TRANSPARENT);
}
else {
selectedMenuItems.add(entriesView.getItemAtPosition(position).toString());
itemSelectedCount = selectedMenuItems.size();
mode.setTitle(itemSelectedCount + " Item(s) Selected");
// entriesView.getChildAt(position).setBackgroundColor(Color.LTGRAY);
View view = entriesView.getChildAt(position);
view.setBackgroundColor(Color.LTGRAY);
}
mode.invalidate();
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
int id = item.getItemId();
switch (id) {
case(R.id.delete_menu_button):
deleteMethod();
selectedMenuItems.clear();
mode.finish();
break;
case(R.id.edit_menu_button1):
callEditActiity();
selectedMenuItems.clear();
mode.finish();
break;
default:
return false;
}
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
if (itemSelectedCount == 1){
MenuItem item = menu.findItem(R.id.edit_menu_button1);
item.setVisible(true);
return true;
} else {
MenuItem item = menu.findItem(R.id.edit_menu_button1);
item.setVisible(false);
return true;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
selectedMenuItems.clear();
}
});
}
свою деятельность в XML-файл
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listEntriesView">
</ListView>