Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite数据重复显示在新Listfragment的屏幕上_Android_Sqlite_Android Fragments - Fatal编程技术网

Android SQLite数据重复显示在新Listfragment的屏幕上

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 =

我使用new ListFragment替换第一个ListFragment,我调用的数据在ListView上重复,(新数据将在ListView中随机插入一行,旧数据仍在屏幕上。只有在activity execute onStop()之后,视图才变得正常)
有没有什么好方法可以清除视图上的旧数据,或者同时用新的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);
}