0

내 ListFragment에서 스 와이프 해체 패턴을 사용하여 목록 뷰에서 개체를 제거합니다. 그러나, 내가 그들을 제거하기 위해 슬쩍 할 때, 그들은 돌아오고있다. 나는 그것을 데이터베이스에서 삭제해야한다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 그리고 그것을 바꾸려면 어떻게해야합니까?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

예상되는 결과는 무엇입니까? 목록보기는 arraylist가 지원하며 remove 메소드는 변경하지 않습니다. 귀하는 arraylist에서 항목을 제거해야합니다.

+0

데이터베이스에서 항목을 제거하고 어댑터를 새로 고쳐 목록에서 항목을 제거 할 것을 기대합니다. – aindurti

+1

arraylist를 중간 남자로 만들었 기 때문에 그렇게하지 않을 것입니다. 귀하의 목록보기는 데이터베이스를 표시하지 않습니다, 그것은 arraylist를 표시합니다. 당신이 설명하는 것에 대해 ArrayAdapter보다는 CursorAdapter를 고려하십시오. – mango

+0

arraylist가 데이터베이스를 업데이트하겠습니까? – aindurti

관련 문제