Android SQLite数据重复显示在新Listfragment的屏幕上
我使用new ListFragment替换第一个ListFragment,我调用的数据在ListView上重复,(新数据将在ListView中随机插入一行,旧数据仍在屏幕上。只有在activity execute onStop()之后,视图才变得正常)Android SQLite数据重复显示在新Listfragment的屏幕上,android,sqlite,android-fragments,Android,Sqlite,Android Fragments,我使用new ListFragment替换第一个ListFragment,我调用的数据在ListView上重复,(新数据将在ListView中随机插入一行,旧数据仍在屏幕上。只有在activity execute onStop()之后,视图才变得正常) 有没有什么好方法可以清除视图上的旧数据,或者同时用新的ListFragment替换它们 主要活动: @Override public void updateResult() { NoteFragment fragmentResult =
有没有什么好方法可以清除视图上的旧数据,或者同时用新的ListFragment替换它们 主要活动:
@Override
public void updateResult() {
NoteFragment fragmentResult = new NoteFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.note_fragment, fragmentResult);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
列表片段:
public class NoteFragment extends ListFragment {
private DB mDbHelper;
private Cursor mCursor = null;
private SimpleCursorAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Debug.log){ Log.d("NoteFragment", "onCreated");}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
setAdapter();
super.onActivityCreated(savedInstanceState);
}
@Override
public void onStart() {
super.onStart();
FragmentManager fm = getFragmentManager();
if( fm.findFragmentById(R.id.note_fragment)!= null){
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
}
public void setAdapter(){
mDbHelper = new DB(getActivity());
mDbHelper.open();
if(mCursor == null){
mCursor = mDbHelper.getAll();
getActivity().startManagingCursor(mCursor);
}
String[] from_column = new String[]{DB.KEY_ITEM, DB.KEY_CREATED};
int[] to_layout = new int[]{android.R.id.text1, android.R.id.text2};
adapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_2,
mCursor, from_column, to_layout);
setListAdapter(adapter);
if(Debug.log){ Log.d("NoteFragment", "setAdapter");}
}
@Override
public void onDestroyView() {
getActivity().stopManagingCursor(mCursor);
mCursor.close();
mDbHelper.close();
super.onDestroyView();
}
DB:
只需用新的适配器替换视图的适配器。为GUI和数据保留单独的逻辑。如果您更改了该视图数据,则无需重新绘制或回收所有GUI。我尝试了If(adapter!=null)来更改setListAdapter,但没有成功,您能告诉我怎么做吗?
...
private static class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_CREATE = "CREATE TABLE "
+ DATABASE_TABLE + "(" + KEY_ROWID + " INTEGER PRIMARY KEY,"
+ KEY_ITEM + " TEXT NOT NULL," + KEY_CREATED + " TIMESTAMP"
+ ")";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
if (Debug.log) {
Log.d("NoteFragment", "DatabaseHelper");
}
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
if (Debug.log) {
Log.d("DB", "onCreate");
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE);
onCreate(db);
if (Debug.log) {
Log.d("DB", "onUpgrade");
}
}
}
/** Constructor */
public DB(Context context) {
this.mContext = context;
if (Debug.log) {
Log.d("DB", "DB");
}
}
public DB open() throws SQLException {
dbHelper = new DatabaseHelper(mContext);
db = dbHelper.getWritableDatabase();
if (Debug.log) {Log.d("DB", "SQLException");
}
return this;
}
public void close() {
dbHelper.close();
if (Debug.log) {
Log.d("DB", "close");
}
}
public Cursor getAll() {
mCursor = db.rawQuery("SELECT * FROM history ORDER BY created DESC",
null);
return mCursor;
}
// add an entry
public long create(String record) {
ContentValues args = new ContentValues();
args.put(KEY_ITEM, record);
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm",
Locale.ENGLISH);
Date now = new Date();
args.put(KEY_CREATED, df.format(now.getTime()));
return db.insert(DATABASE_TABLE, null, args);
}