添加和删除TextView Android的删除线

添加和删除TextView Android的删除线,android,android-checkbox,Android,Android Checkbox,大家好,我在文本视图中添加删除线时遇到问题。这就是我现在正在做的: private void initControls() { tvNote = (TextView) findViewById (R.id.textView1); tvNote.setVisibility(View.GONE); fillData(); } private void fillData() { dbConnect(); // Array list of

大家好,我在文本视图中添加删除线时遇到问题。这就是我现在正在做的:

  private void initControls() {

    tvNote = (TextView) findViewById (R.id.textView1);
    tvNote.setVisibility(View.GONE);

    fillData();

}

private void fillData() {

      dbConnect();

      // Array list of sync data items
      ArrayList<SyncDataItems> itemList = new ArrayList<SyncDataItems>();

      List<Todos> todos = dbHelper.getAllTodos();      

      SyncDataItems _items;

      for (Todos cn : todos) {
          String log = "ID: " + cn.getID() + " , Todo: " + cn.getTodo();
          Log.e("Todo List ", log);
          _items = new SyncDataItems(cn.getTodo(), cn.getTodo(), true);
          itemList.add(_items);
      }

      dataAdapter = new MyCustomAdapter(this, R.layout.item_info, itemList);
      listView = (ListView) findViewById(R.id.listView1);
      // Assign adapter to ListView
      listView.setAdapter(dataAdapter);

      if(dataAdapter.getCount() == 0) {
          tvNote.setVisibility(View.VISIBLE);
          tvNote.setText("No Records Yet");
      }


}

  private class MyCustomAdapter extends ArrayAdapter<SyncDataItems> {

      private ArrayList<SyncDataItems> itemList;

      public MyCustomAdapter(Context context, int textViewResourceId,

      ArrayList<SyncDataItems> itemList) {
       super(context, textViewResourceId, itemList);
           this.itemList = new ArrayList<SyncDataItems>();
           this.itemList.addAll(itemList);
      }

      private class ViewHolder {
           TextView code;
           CheckBox name;
      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {

            holder = null;

            Log.v("ConvertView", String.valueOf(position));

            if (convertView == null) {

                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                convertView = vi.inflate(R.layout.item_info, null);

                holder = new ViewHolder();
                holder.code = (TextView) convertView.findViewById(R.id.code);
                holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1);


                convertView.setTag(holder);

                holder.name.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        CheckBox cb = (CheckBox) v;
                        SyncDataItems _item = (SyncDataItems) cb.getTag();

                        _item.setSelected(cb.isChecked());


                        holder.name.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                                if ( isChecked ) {
                                    Log.e("TAG", "Checked!");
                                    holder.code.append("Checked!");
                                    holder.code.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
                                } else {
                                    holder.code.setPaintFlags(holder.code.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
                                    Log.e("TAG", "Unchecked!");
                                }
                            }
                        });

                    }
                });

            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            final SyncDataItems item = itemList.get(position);

            holder.code.setText(item.getItem());
            holder.name.setChecked(item.isSelected());

            holder.name.setTag(item);



            return convertView;
        }

}
private void initControls(){
tvNote=(TextView)findViewById(R.id.textView1);
tvNote.setVisibility(View.GONE);
fillData();
}
私有void fillData(){
dbConnect();
//同步数据项的数组列表
ArrayList itemList=新建ArrayList();
List todos=dbHelper.getAllTodos();
SyncDataItems\u项目;
for(Todos cn:Todos){
字符串log=“ID:”+cn.getID()+”,Todo:“+cn.getTodo();
Log.e(“待办事项清单”,Log);
_items=新的SyncDataItems(cn.getTodo(),cn.getTodo(),true);
项目列表。添加(_个项目);
}
dataAdapter=新的MyCustomAdapter(this,R.layout.item\u info,itemList);
listView=(listView)findViewById(R.id.listView1);
//将适配器分配给ListView
setAdapter(dataAdapter);
if(dataAdapter.getCount()==0){
tvNote.setVisibility(View.VISIBLE);
tvNote.setText(“尚未记录”);
}
}
私有类MyCustomAdapter扩展了ArrayAdapter{
私有arraylistitemlist;
公共MyCustomAdapter(上下文,int textViewResourceId,
ArrayList项目列表){
super(上下文、textViewResourceId、itemList);
this.itemList=新的ArrayList();
this.itemList.addAll(itemList);
}
私有类视窗持有者{
文本视图代码;
复选框名称;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
holder=null;
Log.v(“ConvertView”,String.valueOf(position));
if(convertView==null){
LayoutInflater vi=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
convertView=vi.充气(R.布局.项目信息,空);
holder=新的ViewHolder();
holder.code=(TextView)convertView.findViewById(R.id.code);
holder.name=(复选框)convertView.findViewById(R.id.checkBox1);
convertView.setTag(支架);
holder.name.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
复选框cb=(复选框)v;
SyncDataItems _item=(SyncDataItems)cb.getTag();
_选择项(cb.isChecked());
holder.name.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
检查更改后的公共无效(复合按钮视图,布尔值已检查){
如果(已检查){
Log.e(“TAG”,“Checked!”);
holder.code.append(“选中!”);
holder.code.setPaintFlags(Paint.STRIKE_-THRU_-TEXT_-FLAG | Paint.ANTI_-ALIAS_-FLAG);
}否则{
holder.code.setPaintFlags(holder.code.getPaintFlags()&(~Paint.STRIKE_-to_-TEXT_-FLAG));
Log.e(“TAG”,“Unchecked!”);
}
}
});
}
});
}否则{
holder=(ViewHolder)convertView.getTag();
}
final SyncDataItems item=itemList.get(位置);
holder.code.setText(item.getItem());
holder.name.setChecked(item.isSelected());
持有人.名称.集合标签(项目);
返回视图;
}
}
但是,当我选中或取消选中复选框时,删除线效果不起作用。有什么想法吗?我们将非常感谢你的帮助。谢谢。

已选中,请更改

holder.code.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);

它应该可以工作。

您可以使用:

holder.code.setPaintFlags(tv.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));

删除作为某个视图一部分的任何文本的划线的最短方法

tvNote.setPaintFlags(0);

您是否替换了上面提到的setPaintFlags,并请指定您是否在复选框事件上获取“选中”和“未选中”的日志是的,我获取的日志显示复选框正在被选中或未选中。我想知道为什么它没有删除线样式这使得文本看起来很清晰,而不是回到原来的样子
tvNote.setPaintFlags(0);