Нужна помощь в удалении элементов Android ListView с помощью флажков - PullRequest
0 голосов
/ 06 мая 2019

У меня есть список задач, которые я отображаю внутри ListView.Внутри каждого элемента ListView есть CheckBox с заголовком задачи и TextView, отображающим дату выполнения.У меня возникают проблемы с удалением элемента из списка, когда установлен флажок внутри элемента ListView.

На данный момент у меня есть OnCheckChangedListener, который установлен для CheckBox внутри адаптера.для просмотра списка.Это устанавливается в методе getView ().Когда флажок установлен, задача удаляется из ArrayList, а новый CustomAdapter создается и применяется к списку просмотра с использованием нового taskList.Это не сработало, поэтому я добавил обработчик для внесения этих изменений в поток пользовательского интерфейса.Все еще не работает.Из журналов я могу сказать, что слушатель вызывается, но элементы не удаляются.

ArrayList<Task> taskList;
Context mContext;
ListView listView;
Handler handler;

public CustomAdapter(Context mContext, ArrayList<Task> taskList){
    this.mContext = mContext;
    this.taskList = taskList;
    this.handler = new Handler(mContext.getMainLooper());
}

@Override
public int getCount() {
    return taskList.size();
}

@Override
public Object getItem(int position) {
    return taskList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView == null){
        convertView = LayoutInflater.from(mContext).inflate(R.layout.listview_item,parent,false);
    }

    final View row = convertView;

    CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.checkBoxTask);
    TextView textTaskDueDate = (TextView)convertView.findViewById(R.id.textTaskDueDate);

    checkBox.setText(taskList.get(position).getTask());
    textTaskDueDate.setText("Due Date: " + taskList.get(position).getDueDate());

    checkBox.setTag(position);

    listView = parent.findViewById(R.id.listViewTasks);

    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                Log.i("CheckBox Listener", "Check heard");
                Log.i("Button Tag", String.valueOf(buttonView.getTag()));
                Log.i("taskList length before", String.valueOf(taskList.size()));
                taskList.remove(buttonView.getTag());
                Log.i("taskList length after", String.valueOf(taskList.size()));
                notifyDataSetChanged();
            }
        }
    });

    return convertView;
}

1 Ответ

0 голосов
/ 06 мая 2019

Проблема в том, что для удаления элемента в данной позиции с помощью remove() ожидается, что параметр имеет тип int.В настоящее время использование

taskList.remove(buttonView.getTag()); 
notifyDataSetChanged();

Метод getTag() возвращает Object, а не int, поэтому удаление не удалит элемент в позиции.Вам нужно будет преобразовать объект, возвращаемый getTag(), в int, и, таким образом, он удалит элемент в заданной позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...