2013-04-05 53 views
1

在我的應用程序中,我使用SimpleCursorAdapter。如果CheckBox.isChecked()那麼文本應該是刪除線。但是,爲什麼那麼第一線總是劃掉,即使CheckBox未選中爲什麼第一行總是被刪除?

public class MainActivity extends Activity { 
// Button btnCalendar; 

//*******************************************8 
String[] names = {"Иван", "Марья", "Петр", "Антон", "Даша", "Борис", 
      "Костя", "Игорь", "Анна", "Денис", "Андрей"}; 
//Button buttonAddTask; 
final String Tag="States"; 
final String Ten = "Ten"; 
TextView txtDataTaskToday; 
String id_for_listtsk_today; 
ListView lvMain_today; 
String[] arr_date; 
SharedPreferences sPref; 
static Cursor c; 
private ListView listView = null; 
SQLiteDatabase db; 
//public static String id_for_listtsk_today; 
// static SQLiteDatabase db; 
MySqlCursorAdapter adapter = null; 
//***********************************************8 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    if (getIntent().getBooleanExtra("finish", false)) finish(); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
// btnCalendar = (Button) findViewById(R.id.btnActTwo); 
// btnCalendar.setOnClickListener(this); 

    //********************************************* 
    // переменные для query 
    String[] columns = null; 
    String selection = null; 
    String[] selectionArgs = null; 
    String groupBy = null; 
    String having = null; 
    String orderBy = null; 

    //*********работа с БД**************** 
    // создаем объект для данных 

     txtDataTaskToday = (TextView) findViewById(R.id.txtDataTaskToday); 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
     String id_for_listtsk_today = sdf.format(new Date()); 
     //final String b = id_for_listtsk_today; 
     txtDataTaskToday.setText("Today: "+id_for_listtsk_today.toString()); 
    // txtDataTaskToday.setPaintFlags(txtDataTaskToday.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

     Log.d(Tag, "id_for_listtsk_today ="+id_for_listtsk_today); 
     ContentValues cv = new ContentValues(); 
     DBHelper dbHelper = new DBHelper(this);  
     final SQLiteDatabase db = dbHelper.getWritableDatabase(); 
     columns = new String[] {"name"}; 
     selection = "data_id = ?"; 
     selectionArgs = new String[] {id_for_listtsk_today}; 
     //c = db.query("mytable", columns, selection, selectionArgs, null, null, null); 
     try { 
     c=dbHelper.getCursor(id_for_listtsk_today); 
     } catch (SQLException sqle) { 
      Log.d(Tag, "неудача"); 
      throw sqle; 

     } 
     String[] arr_date = logCursor(c); 

    //*********работа с БД**************** 

     lvMain_today = (ListView) findViewById(R.id.list); 
//   lvMain_today.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     //this.listView=getl 
     //listView = MainActivity.this.getlgetListView(); 
     lvMain_today.setItemsCanFocus(false); 
     lvMain_today.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     //ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_multiple_choice, arr_date);// R.layout.item, my_list_item 
     startManagingCursor(c); 
     int[] listFields = new int[] { R.id.txtTitle, R.id.txtDataTaskToday }; 
     String[] dbColumns = new String[] { DBHelper.COLUMN_NAME, DBHelper.COLUMN_TASK }; 
     Log.d(Tag, "трассировка"); 
     MainActivity.this.adapter = new MySqlCursorAdapter(
       this, R.layout.my_list_item, 
       c, dbColumns, listFields, 
       dbHelper); 
//   
     lvMain_today.setAdapter(MainActivity.this.adapter); 
    // setListAdapter(MainActivity.this.adapter); 




     names = arr_date; 
     //c.close(); 
     //db.close(); 
     //dbHelper.close(); 



     lvMain_today.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
        TextView txtView = (TextView) findViewById(R.id.txtTitle); 
        txtView.setText("blah blah blah"); 
        Log.d(Tag, "position="+position); 
       // ((TextView)  txtDataTaskToday).setTextColor(android.R.color.white); 
        SparseBooleanArray chosen = ((ListView)  parent).getCheckedItemPositions(); 
        for (int i = 0; i < chosen.size(); i++) { 
         int key = chosen.keyAt(i); 
         if (chosen.get(key)) 
         Log.d(Tag, "выделены ====="+names[key]); 
        Log.d(Tag, "itemClick: position = " + position + ", id = " 
        + id);} 


       //****************nen пробная фигня************** 

//     String[] columns = null; 
//     String selection = null; 
//     String[] selectionArgs = null; 
//     String groupBy = null; 
//     String having = null; 
//     String orderBy = null; 
//     columns = new String[] {"name"}; 
//     selection = "data_id = ?"; 
//     selectionArgs = new String[]  {id_for_listtsk_today};//id_for_listtsk_today 
//     Cursor c = db.query("mytable", columns, selection, selectionArgs, null, null, null); 
      // String[] arr = logCursor(c); 
       //************************************************** 
        // String s=test(); 
       } 

      }); 

//   lvMain_today.setOnItemSelectedListener(new OnItemSelectedListener() { 
//    public void onItemSelected(AdapterView<?> parent, View view, 
//     int position, long id) { 
//     Log.d(Tag, "Было выделение позиции меню!!!!position = " + position + ", id = " 
//      + id); 
//    } 
// 
//    public void onNothingSelected(AdapterView<?> parent) { 
//     Log.d(Tag, "itemSelect: nothing"); 
//    } 
//    }); 
} 

private String[] logCursor(Cursor c) { 
    // TODO Auto-generated method stub 
    final String Tag="States"; 
    String[] arr_date = new String[c.getCount()];//String[] arr_date = new String[] {}; 
    Log.d(Tag,"мы в курсоре"); 
    if (c!=null) { 
     if (c.moveToFirst()) { 
     // Log.d(Tag,"мы в курсоре1"); 
      String str; 
      int i=-1; 
      do { 
      // Log.d(Tag,"мы в курсоре2"); 
       str=""; 
       i=i+1; 
       for (String cn: c.getColumnNames()) { 
        str = str.concat(c.getString(c.getColumnIndex(cn))); 
       } 
       Log.d(Tag, "++++"+str); 
       arr_date[i]=String.valueOf(str); 
      } while (c.moveToNext()); 

     } 
    } 

    return arr_date; 

} 




@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    menu.add(0, 1, 0, "календарь"); 
    menu.add(0, 2, 0, "Убрать выполненные"); 
    menu.add(0, 3, 3, "Уйти"); 
//  menu.add(1, 4, 1, "copy"); 
//  menu.add(1, 5, 2, "paste"); 
//  menu.add(1, 6, 4, "exit"); 

     return super.onCreateOptionsMenu(menu); 
// getMenuInflater().inflate(R.menu.main, menu); 
    //return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     StringBuilder sb = new StringBuilder(); 

     // Выведем в TextView информацию о нажатом пункте меню 
    // txtDataTaskToday.setText("Item Menu"); 
    // txtDataTaskToday.setText(item.getGroupId()); 
     txtDataTaskToday.setText("\r\n itemId: " + String.valueOf(item.getItemId())); 
    // txtDataTaskToday.setText("\r\n order: " + String.valueOf(item.getOrder())); 
    // txtDataTaskToday.setText("\r\n title: " + item.getTitle()); 
     switch (item.getItemId()) { 
    case 1: 
     Intent intent = new Intent(this, ToDoCalendarActivity.class); 
     startActivity(intent); 
     onDestroy(); 
     break; 
    case 2: 

     SparseBooleanArray sbArray = lvMain_today.getCheckedItemPositions(); 
     for (int i = 0; i < sbArray.size(); i++) { 
      int key = sbArray.keyAt(i); 
      if (sbArray.get(key)) 
      Log.d(Tag, "выделены "+names[key]); 
      sPref = getPreferences(MODE_PRIVATE); 
      Editor ed = sPref.edit(); 
      ed.putString(Ten, "1"); 
      ed.commit(); 
      Log.d(Tag, "ставим константу для скрытия"); 
     } 


     break; 
    case 3: 
     sPref = getPreferences(MODE_PRIVATE); 
     String savedText = sPref.getString(Ten, ""); 
     Log.d(Tag, "ten= "+ savedText); 
     onDestroy(); 
     //finish(); 
     break; 

    } 

     return super.onOptionsItemSelected(item); 
    } 

@Override 
    protected void onStart() { 
    super.onStart(); 
    try { 
     MainActivity.this.onRestart(); 
    } catch (Exception e) { 
     Log.d(Tag, "не получилось рестартануть"); 
    } 
    Log.d(Tag, "MainActivity: onStart()"); 
    } 



    @Override 
    protected void onResume() { 
    super.onResume(); 
    Log.d(Tag, "MainActivity: onResume()"); 
    } 

protected void onDestroy() { 
    super.onDestroy(); 
    // закрываем подключение при выходе 
    // ToDoCalendarActivity.this.finish(); 
    Log.d(Tag, "MainActivity: onDestroy()"); 
    finish(); 

// db.close(); 
    } 
@Override 
protected void onPause() { 

    super.onPause(); 
    //this.dbHelper.close(); 
    Log.d(Tag, "MainActivity: onPause()"); 
} 
@Override 
    protected void onStop() { 
    super.onStop(); 
    Log.d(Tag, "MainActivity: onStop()"); 
    } 
@Override 
protected void onRestart() { 
    super.onRestart(); 
// new SelectDataTask().execute(); 
    Log.d(Tag, "MainActivity: onRestart()"); 

} 

// @Override 
// public void onClick(View v) { 
//  // TODO Auto-generated method stub 
//  switch (v.getId()) { 
//  case R.id.btnActTwo: 
//   
//   Intent intent = new Intent(this, ToDoCalendarActivity.class); 
//   startActivity(intent); 
//   break; 
//  } 
// } 

} 

MySqlCursorAdapter

public class MySqlCursorAdapter extends SimpleCursorAdapter implements OnClickListener { 
    final String Tag="States"; 
    private Context context; 

    private DBHelper dbHelper; 
    private Cursor currentCursor; 
    TextView txtTitle; 
    TextView txtTitle1; 

    public MySqlCursorAdapter(Context context, int layout, Cursor c, 
     String[] from, int[] to, DBHelper dbHelper) { 

     super(context, layout, c, from, to); 
     Log.d(Tag, "трассировка1"); 
     this.currentCursor = c; 
     this.context = context; 
     this.dbHelper = dbHelper; 
     Log.d(Tag, "MySqlCursorAdapter()"); 
     Integer b = c.getCount(); 
     Log.d(Tag, "b="+b); 
    } 

    public View getView(int pos, View inView, ViewGroup parent) { 
     Log.d(Tag, "getView() + posss=" + pos); 
     View v = inView; 
     if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.my_list_item, null); 
     } 

     this.currentCursor.moveToPosition(pos); 

     CheckBox cBox = (CheckBox) v.findViewById(R.id.bcheck); 

     cBox.setTag(Integer.parseInt(this.currentCursor.getString(this.currentCursor.getColumnIndex(DBHelper.COLUMN_ID)))); 
     Log.d(Tag, "tag="+cBox.getTag().toString()); 
     if (this.currentCursor.getString(this.currentCursor 
      .getColumnIndex(DBHelper.COLUMN_STATUS)) != null 
      && Integer.parseInt(this.currentCursor 
       .getString(this.currentCursor 
         .getColumnIndex(DBHelper.COLUMN_STATUS))) != 0) { 
      cBox.setChecked(true); 
     } else { 
      cBox.setChecked(false); 
     } 

     cBox.setOnClickListener(this); 

     txtTitle = (TextView) v.findViewById(R.id.txtTitle); 
     txtTitle1 = (TextView) v.findViewById(R.id.txtDataTaskToday); 
     txtTitle.setText(this.currentCursor.getString(this.currentCursor.getColumnIndex(DBHelper.COLUMN_NAME))); 
     txtTitle1.setText(this.currentCursor.getString(this.currentCursor.getColumnIndex(DBHelper.COLUMN_TASK))); 
     if (cBox.isChecked()) { 
      Log.d(Tag, " pos=" + pos); 
      txtTitle.setPaintFlags(txtTitle.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);  
      txtTitle1.setPaintFlags(txtTitle.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
     } 

     return (v); 
    } 

    public void ClearSelections() { 
     Log.d(Tag, "ClearSelections()"); 
     this.dbHelper.clearSelections(); 
     this.currentCursor.requery(); 
    } 

    @Override 
    public void onClick(View v) { 
     if(dbHelper.dbSqlite==null) { 
      //Log.d(Tag, "00000000000"); 
      SQLiteDatabase db = dbHelper.getWritableDatabase();  
      //Log.d(Tag, "onClick"); 
      CheckBox cBox = (CheckBox) v; 
      Integer _id = (Integer) cBox.getTag(); 
      //Integer _id = 4; 
      //Log.d(Tag, "Integer _id="+_id.toString()); 
      ContentValues values = new ContentValues(); 
      values.put(" status", cBox.isChecked() ? 1 : 0); 
      try { 
       db.update("mytable", values, "_id = ?", new String[] { Integer.toString(_id) }); 
      } catch (SQLException sqle) { 
       // Log.d(Tag, "неудача"); 
       throw sqle; 
      } 
     } 

     txtTitle.setTextColor(Color.BLUE); 

     } 
    } 
} 

我把標誌的TextView在functoin getView() txtTitle.setPaintFlags(txtTitle.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); txtTitle1.setPaintFlags(txtTitle.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 爲什麼第一行總是被劃掉?

+0

您是否試圖添加其他以if(cBox.isChecked())並重置在那裏通過? – sandrstar 2013-04-05 07:08:02

+0

我該如何重置? – kelebro63 2013-04-05 07:13:41

+0

指的是答案,這就是我的意思。 – sandrstar 2013-04-05 07:23:47

回答

4

setPaintFlags變化是持久的,所以我懷疑你的函數被調用了兩次,第一次cBox.setChecked(true)執行,但在執行第二次cBox.setChecked(false),所以標誌不復位。因此:

if (cBox.isChecked()) 
    { 
     Log.d(Tag, " pos=" + pos); 
     txtTitle.setPaintFlags(txtTitle.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);  
     txtTitle1.setPaintFlags(txtTitle.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
    } 
    else 
    { 
     Log.d(Tag, "!pos=" + pos); 
     txtTitle.setPaintFlags(txtTitle.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);  
     txtTitle1.setPaintFlags(txtTitle.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); 
    } 
+0

謝謝,它的工作! – kelebro63 2013-04-05 07:28:17

相關問題