#android #listview #user-interface #inflate
#Android #listview #пользовательский интерфейс #раздувать
Вопрос:
привет всем, я работаю над проектом для отображения задач для сотрудника, и эти задачи должны устанавливать статус задач по сотрудникам, я обрабатываю это с помощью меню, чтобы обновлять статистику, это адаптер массива
public class MyArrayAdapter extends ArrayAdapter<Task> {
private static int viewCount = 0;
public MyArrayAdapter(Context context) {
super(context, R.layout.listview_items, R.id.taskTitle);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
boolean created = false;
if (convertView == null) {
created = true;
viewCount ;
}
View view = super.getView(position, convertView, parent);
Task task = getItem(position);
if (task != null) {
TextView taskTitle = (TextView) view.findViewById(R.id.taskTitle);
ImageView imageView = (ImageView) view.findViewById(R.id.taskImage);
TextView taskStatus = (TextView) view.findViewById(R.id.taskStatus);
TextView taskDate = (TextView) view.findViewById(R.id.taskDate);
if (created amp;amp; taskTitle != null) {
taskTitle.setText(task.getTaskTitle());
}
if (imageView != null amp;amp; task.image != null) {
imageView.setImageDrawable(task.image);
}
if (taskStatus != null amp;amp; task.taskStatus != null) {
taskStatus.setText(task.getTaskStatus());
}
if (taskDate != null amp;amp; task.taskDate != null) {
taskDate.setText(task.getTaskDate());
}
}
return view;
}
}
мне нужно изменить textview «TaskStatus», я пытаюсь это сделать
View v = adapter
.getView(listView.getSelectedItemPosition(),null , null);
TextView textView = (TextView) v.findViewById(R.id.taskStatus);
textView.setText("Started");
adapter.notifyDataSetChanged();
но это не работает, кто-нибудь может мне помочь, плз
Комментарии:
1. не меняйте представление напрямую — измените значение в массиве.
Ответ №1:
Вам следует удалить следующие строки из вашего кода:
View v = adapter.getView(listView.getSelectedItemPosition(),null , null);
TextView textView = (TextView) v.findViewById(R.id.taskStatus);
textView.setText("Started");
и вместо этого определите выбранный Task
экземпляр: task
, и
task.setTaskStatus("Started");
adapter.notifyDataSetChanged();
Таким образом, вы изменяете базовые данные и позволяете адаптеру отображать правильное представление (обновите соответствующее TextView
правильно, уведомив его об этом изменении; это то, что делает notifyDataSetChanged
метод.
Комментарии:
1. спасибо за ваш ответ, я получил объект task с помощью `int taskPo = ListView.getSelectedItemPosition(); Задача task = adapter.GetItem(taskPo);` это правильно?
2. Так и должно быть. И вызов метода get с позицией в качестве параметра в списке, используемом в адаптере, также должен работать!
3. Добро пожаловать, я рад, что вы сделали это! Кроме того, если вы получили правильный ответ, пожалуйста, отметьте свой вопрос решенным, приняв его, чтобы другие могли ссылаться на него / учиться на нем. Спасибо!