[英]Strikethrough on TextView text stays when item is removed from ListView
所以我有一个ListView,其中包含一个复选框和一个TextView。 单击列表视图时,我能够成功删除掉ListView的TextView对象上的文本,再次单击该对象时,则可以删除掉删除线。 但是,当我从ListView中删除一个项目时,删除线仍保持静态连接到该行。
是否有办法使删除线发生在行中的项目上而不是行本身上?
这是我的代码:
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
BucketItem item = bucketList.get(position);
TextView goal = (TextView) view.findViewById(R.id.row_text);
if(item.isDone()){
item.setDone(false);
goal.setPaintFlags(goal.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
else{
item.setDone(true);
goal.setPaintFlags(goal.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
listAdapter.notifyDataSetChanged();
}
public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
new AlertDialog.Builder(this)
.setIconAttribute(android.R.attr.alertDialogIcon)
.setTitle("Confirm Delete")
.setMessage("Are you sure you want to delete this goal?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
bucketList.remove(position);
listAdapter.notifyDataSetChanged();
}
})
.setNegativeButton("No", null)
.show();
return true;
}
适配器:
public class BucketAdapter extends ArrayAdapter<BucketItem> {
private ArrayList<BucketItem> bucketList;
private Context context;
public BucketAdapter(Context context, int textViewResourceId, ArrayList<BucketItem> bucketList) {
super(context, textViewResourceId, bucketList);
this.context = context;
this.bucketList = bucketList;
}
private class ViewHolder {
CheckBox done;
TextView goal;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.row, null);
holder = new ViewHolder();
holder.goal = (TextView) convertView.findViewById(R.id.row_text);
holder.done = (CheckBox) convertView.findViewById(R.id.row_check);
convertView.setTag(holder);
holder.done.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
BucketItem item = (BucketItem) cb.getTag();
item.setDone(cb.isChecked());
}
});
}
else {
holder = (ViewHolder) convertView.getTag();
}
BucketItem item = bucketList.get(position);
holder.goal.setText(item.getGoal());
holder.done.setChecked(item.isDone());
holder.done.setTag(item);
return convertView;
}
}
油漆标志应在适配器的getView
方法中设置。 然后,当您notifyDataSetChanged
,它可以根据您的支持模型确定状态。
试试下面的适配器,看看是否有帮助
public class BucketAdapter extends ArrayAdapter<BucketItem> {
private ArrayList<BucketItem> bucketList;
private Context context;
public BucketAdapter(Context context, int textViewResourceId,
ArrayList<BucketItem> bucketList) {
super(context, textViewResourceId, bucketList);
this.context = context;
this.bucketList = bucketList;
}
private class ViewHolder {
CheckBox done;
TextView goal;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder = null;
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.row, null);
holder = new ViewHolder();
holder.goal = (TextView) convertView
.findViewById(R.id.row_text);
holder.done = (CheckBox) convertView
.findViewById(R.id.row_check);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.done
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
BucketItem item = (BucketItem)getItem(position);
item.setDone(isChecked);
if (isChecked) {
holder.goal.setPaintFlags(holder.goal.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}else{
holder.goal.setPaintFlags(holder.goal.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
}
}
});
BucketItem item = bucketList.get(position);
holder.goal.setText(item.getGoal());
holder.done.setChecked(item.isDone());
holder.done.setTag(item);
return convertView;
}
}
同时删除列表视图的onItemClickListener,OnItemLongClickListener应该如下所示
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
adapter.remove((BucketItem)parent.getItemAtPosition(position));
adapter.notifyDataSetChanged();
return false;
}
让我知道它是否无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.