【发布时间】:2017-02-16 23:49:47
【问题描述】:
编辑:
我现在可以在列表视图中敲击单词,但只能从底部向上敲击,之后只能取消敲击底部的项目。代码如下。
@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)。非常感谢在 ListView 中为我的 TextViews 使用 Spannable String 的任何帮助。
【问题讨论】:
标签: android listview layout textview spannablestring