Spannable String работает только для последнего элемента в ListView
Редактировать:
Теперь я могу вычеркнуть слова из списка, но могу это сделать только снизу вверх, а потом могу только ударить нижний элемент. Код ниже.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final SubTask subTask = getItem(position);
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.subtask_adapter_list, parent, false);
}
final TextView tasksTitle = (TextView)convertView.findViewById(R.id.tasksName);
tasksTitle.setTypeface(typeface);
completed = (CheckBox)convertView.findViewById(R.id.completed);
changeColor();
tasksTitle.setText(subTask.getSubTask());
completed.setChecked(subTask.isCompleted());
toggleLineThrough(tasksTitle, tasksTitle.getText().toString(), subTask.getSubTask(), completed.isChecked());
completed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(completed.isChecked()){
subTask.setCompleted(true);
subTask.save();
toggleLineThrough(tasksTitle, tasksTitle.getText().toString(), subTask.getSubTask(), completed.isChecked());
} else {
subTask.setCompleted(false);
subTask.save();
toggleLineThrough(tasksTitle, tasksTitle.getText().toString(), subTask.getSubTask(), completed.isChecked());
}
}
});
return convertView;
}
private void toggleLineThrough(TextView tasksTitle, String title, String oldTitle, boolean completed){
SpannableString styledString = new SpannableString(title);
if(completed == true){
styledString.setSpan(new StrikethroughSpan(), 0, title.length(), 0);
tasksTitle.setText(styledString);
} else {
tasksTitle.setText(oldTitle);
}
}
Я пытаюсь, чтобы забастовка проходила через TextView, если его критерии выполнены. По логике это работает, но только для последнего элемента в ListView. Все остальные предметы, кажется, не создают удар вообще. Мой код ниже:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
subTask = getItem(position);
if(convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.subtask_adapter_list, parent, false);
}
tasksTitle = (TextView)convertView.findViewById(R.id.tasksName);
tasksTitle.setTypeface(typeface);
completed = (CheckBox)convertView.findViewById(R.id.completed);
changeColor();
tasksTitle.setText(subTask.getSubTask());
toggleLineThrough(subTask.getSubTask());
completed.setChecked(subTask.isCompleted());
completed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(completed.isChecked()){
subTask.setCompleted(true);
subTask.save();
toggleLineThrough(subTask.getSubTask());
} else {
subTask.setCompleted(false);
subTask.save();
toggleLineThrough(subTask.getSubTask());
}
}
});
return convertView;
}
private void toggleLineThrough(String text){
SpannableString styledString = new SpannableString(text);
if(completed.isChecked()){
styledString.setSpan(new StrikethroughSpan(), 0, text.length(), 0);
tasksTitle.setText(styledString);
} else {
tasksTitle.setText(text);
}
}
Я просто не могу заставить забастовку работать на них всех. Я также пытался использовать метод Paint Flags с тем же результатом (даже полностью скрывая мой TextView). Любая помощь с использованием Spannable String для моих TextViews в ListView будет очень признательна.