0

В моем спискеFragment я использую шаблон swipe-to-reject для удаления объектов в моем списке. Однако, когда я сажусь, чтобы удалить их, они возвращаются. Я обязательно удалю его из базы данных. Что я делаю не так? И что я могу сделать, чтобы изменить это?База данных SQLite не удаляет записи

Вот мой listfragment

/** 
* A list fragment representing a list of Courses. This fragment also supports 
* tablet devices by allowing list items to be given an 'activated' state upon 
* selection. This helps indicate which item is currently being viewed in a 
* {@link CourseDetailFragment}. 
* <p> 
* Activities containing this fragment MUST implement the {@link Callbacks} 
* interface. 
*/ 
public class CourseListFragment extends SherlockListFragment { 

SQLiteDatabase db; 
DbHelper dbHelper; 

private static String courseName; 
ArrayList<String> courseItems; 
ArrayAdapter<String> adapter; 
/** 
* The serialization (saved instance state) Bundle key representing the 
* activated item position. Only used on tablets. 
*/ 
private static final String STATE_ACTIVATED_POSITION = "activated_position"; 

/** 
* The fragment's current callback object, which is notified of list item 
* clicks. 
*/ 
private Callbacks mCallbacks = sDummyCallbacks; 

/** 
* The current activated item position. Only used on tablets. 
*/ 
private int mActivatedPosition = ListView.INVALID_POSITION; 

/** 
* A callback interface that all activities containing this fragment must 
* implement. This mechanism allows activities to be notified of item 
* selections. 
*/ 
public interface Callbacks { 
    /** 
    * Callback for when an item has been selected. 
    */ 
    public void onItemSelected(String id); 
} 

/** 
* A dummy implementation of the {@link Callbacks} interface that does 
* nothing. Used only when this fragment is not attached to an activity. 
*/ 
private static Callbacks sDummyCallbacks = new Callbacks() { 
    @Override 
    public void onItemSelected(String id) { 
    } 
}; 

/** 
* Mandatory empty constructor for the fragment manager to instantiate the 
* fragment (e.g. upon screen orientation changes). 
*/ 
public CourseListFragment() { 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dbHelper = new DbHelper(getActivity()); 
    db = dbHelper.getWritableDatabase(); 
    courseItems = new ArrayList<String>(); 
    int layout = (Build.VERSION.SDK_INT >= 11) ? android.R.layout.simple_list_item_activated_1 
      : android.R.layout.simple_list_item_1; 
    adapter = new ArrayAdapter<String>(getActivity(), layout, courseItems); 
    // TODO: replace with a real list adapter. 
    setListAdapter(adapter); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    // Restore the previously serialized activated item position. 
    if (savedInstanceState != null 
      && savedInstanceState.containsKey(STATE_ACTIVATED_POSITION)) { 
     setActivatedPosition(savedInstanceState 
       .getInt(STATE_ACTIVATED_POSITION)); 
    } 
    // The problem starts here 
    SwipeDismissListViewTouchListener touchListener = new SwipeDismissListViewTouchListener(
      getListView(), 
      new SwipeDismissListViewTouchListener.OnDismissCallback() { 
       public void onDismiss(ListView listView, 
         int[] reverseSortedPositions) { 
        for (int position : reverseSortedPositions) { 
         removeCourse(position); 
         adapter.notifyDataSetChanged(); 
        } 
       } 
      }); 
    getListView().setOnTouchListener(touchListener); 
    getListView().setOnScrollListener(touchListener.makeScrollListener()); 
    adapter.notifyDataSetChanged(); 
} 

@Override 
public void onViewStateRestored(Bundle savedInstanceState) { 
    super.onViewStateRestored(savedInstanceState); 
    String[] projection = { DbHelper.COURSE_NAME }; 
    Cursor c = db.query(DbHelper.TABLE_NAME, projection, null, null, null, 
      null, null); 
    c.moveToFirst(); 

    while (c.moveToNext()) { 
     courseName = c.getString(c.getColumnIndex(DbHelper.COURSE_NAME)); 
     courseItems.add(courseName); 
    } 
    c.close(); 
    adapter.notifyDataSetChanged(); 
} 

public void addCourse() { 
    String[] projection = { DbHelper.COURSE_NAME }; 
    Cursor c = db.query(DbHelper.TABLE_NAME, projection, null, null, null, 
      null, null); 
    c.moveToLast(); 
    courseName = c.getString(c.getColumnIndex(DbHelper.COURSE_NAME)); 
    courseItems.add(courseName); 
    c.close(); 
    adapter.notifyDataSetChanged(); 
} 

public void removeCourse(int position) { 
    String[] projection = { DbHelper.C_ID, DbHelper.COURSE_NAME }; 
    Cursor c = db.query(DbHelper.TABLE_NAME, projection, null, null, null, 
      null, null); 
    c.moveToPosition(position); 
    db.delete(DbHelper.TABLE_NAME, DbHelper.C_ID + "=" + position, 
      null); 
    c.close(); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // Activities containing this fragment must implement its callbacks. 
    if (!(activity instanceof Callbacks)) { 
     throw new IllegalStateException(
       "Activity must implement fragment's callbacks."); 
    } 

    mCallbacks = (Callbacks) activity; 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 

    // Reset the active callbacks interface to the dummy implementation. 
    mCallbacks = sDummyCallbacks; 
} 

@Override 
public void onListItemClick(ListView listView, View view, int position, 
     long id) { 
    super.onListItemClick(listView, view, position, id); 
    // Notify the active callbacks interface (the activity, if the 
    // fragment is attached to one) that an item has been selected. 
    mCallbacks.onItemSelected(null); 

} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    if (mActivatedPosition != ListView.INVALID_POSITION) { 
     // Serialize and persist the activated item position. 
     outState.putInt(STATE_ACTIVATED_POSITION, mActivatedPosition); 
    } 
} 

/** 
* Turns on activate-on-click mode. When this mode is on, list items will be 
* given the 'activated' state when touched. 
*/ 
public void setActivateOnItemClick(boolean activateOnItemClick) { 
    // When setting CHOICE_MODE_SINGLE, ListView will automatically 
    // give items the 'activated' state when touched. 
    getListView().setChoiceMode(
      activateOnItemClick ? ListView.CHOICE_MODE_SINGLE 
        : ListView.CHOICE_MODE_NONE); 
} 

public void setActivatedPosition(int position) { 
    if (position == ListView.INVALID_POSITION) { 
     getListView().setItemChecked(mActivatedPosition, false); 
    } else { 
     getListView().setItemChecked(position, true); 
    } 

    mActivatedPosition = position; 
} 
} 

Спасибо! Любая помощь высоко ценится!

+0

hii, нашел ли решение для вашей проблемы? я застрял на том же самом –

ответ

1

Что вы ожидаете? Ваш список просматривается архиватором, и ваш метод удаления не вносит никаких изменений. Вы также удалили товар у своего архариста

+0

Я удаляю элемент из базы данных, и я ожидаю обновления адаптера, чтобы удалить элемент из списка. – aindurti

+1

Ну, это не будет сделано, потому что вы сделали arraylist средним человеком. В вашем списке не отображается база данных, она отображает ваш arraylist, который не связан ни с чем, когда он создан. Для того, что вы описываете, рассмотрите CursorAdapter, а не ArrayAdapter. – mango

+0

изменит базу данных арраиста? – aindurti