2014-03-24 207 views
0

我想保存我的列表視圖及其組件,以便當我退出應用程序並返回時它們仍可用。目前他們被清除,我不得不製造新的物品。在退出應用程序之前保存列表視圖

我一直在做一些關於onSaveInstanceState的研究,但我不確定在目前情況下如何實現它。

我應該怎麼做才能存儲我當前的Listview狀態?陣列?

MAINACTIVITY

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    // Check whether we're recreating a previously destroyed instance 
    //if (savedInstanceState != null) { 
     // Restore value of members from saved state 
     //mUser = savedInstanceState.getString(STATE_USER); 
    //} else { 
     // Probably initialize members with default values for a new 
     // instance 
     //mUser = "NewUser"; 
    //} 

    // // get detail controls 
    tvTitle = (TextView) findViewById(R.id.textViewTitle); 
    tvDate = (TextView) findViewById(R.id.textViewDate); 
    tvTime = (TextView) findViewById(R.id.textViewTime); 
    ivPic = (ImageView) findViewById(R.id.imageView1); 

    add = (ImageButton) findViewById(R.id.add); 
    add.setOnClickListener(this); 

} 

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

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // Create the adapter to convert the array to views 
    EventAdapter adapter = new EventAdapter(this, lstEvents); 

    // attach adapter to a list view 
    listView = (ListView) findViewById(R.id.listViewFragment); 
    listView.setAdapter(adapter); 

    if (requestCode == 100) { 
     if (resultCode == RESULT_OK) { 
      Bundle b = data.getExtras(); 
      title = b.getString("TITLE"); 
      time = b.getString("TIME"); 
      date = b.getString("DATE"); 

      // retrieving bitmap from CreateActivity 

      Bitmap bitmap = (Bitmap) b.getParcelable("DRAWABLE"); 

      // converting from bitmap to drawable 
      Drawable drawable = new BitmapDrawable(getResources(), bitmap); 

      Log.e("TITLE", title); 
      Log.e("TIME", time); 
      Log.e("DATE", date); 

      Event newEvent = new Event(); 
      newEvent.set_date(date); 
      newEvent.set_title(title); 
      newEvent.set_time(time); 

      // set drawable 
      newEvent.set_drawable(drawable); 

      lstEvents.add(newEvent); 

      adapter.addAll(lstEvents); 
      adapter.notifyDataSetChanged(); 
     } 
    } 

} 

@Override 
protected void onSaveInstanceState(Bundle savedInstanceState) { 
    // savedInstanceState.putInt(STATE_USER, mUser); 
    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 
} 
+1

我會退出應用程序,然後再重新短語的標題。 – user2672165

回答

0

我結束了使用SQLite數據庫中。下面是我實施的一些代碼,我將繼續更新,直到應用程序完成。

DBHANDLER

public class DatabaseHandler extends SQLiteOpenHelper { 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "scheduleManager"; 

// Contacts table name 
private static final String TABLE_EVENTS = "events"; 


// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_TITLE = "title"; 
private static final String KEY_TIME = "time"; 
private static final String KEY_DATE = "date"; 
private static final int KEY_DRW = 0; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    String CREATE_EVENTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "(" 
      + KEY_ID + " INTEGER," + KEY_TITLE + " TEXT," 
      + KEY_TIME + " TEXT," + KEY_DATE + " TEXT" + ")"; 
    db.execSQL(CREATE_EVENTS_TABLE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_EVENTS); 

    // Create tables again 
    onCreate(db); 

} 

/** 
* All CRUD(Create, Read, Update, Delete) Operations 
*/ 


//adding an event (NEEDS TO ADD DRAWABLE) 
public void addEvent(Event event) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_ID, event.get_Id()); //Event ID 
     values.put(KEY_TITLE, event.get_title()); // Event Title 
     values.put(KEY_TIME, event.get_time()); // Event Time 
     values.put(KEY_DATE, event.get_date()); // Event Date 
     //values.put(KEY_DRW, event.get_drawable()); // Event Drawable 

     // Inserting Row 
     db.insert(TABLE_EVENTS, null, values); 
     db.close(); // Closing database connection 
    } 

    // Getting single contact 
    public Event getEvent(int id) { 
     SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor cursor = db.query(TABLE_EVENTS, new String[] { KEY_ID, 
       KEY_TITLE, KEY_TIME, KEY_DATE }, KEY_ID + "=?", 
       new String[] { String.valueOf(id) }, null, null, null, null); 
     if (cursor != null) 
      cursor.moveToFirst(); 

     Event event = new Event(Integer.parseInt(cursor.getString(0)), 
       cursor.getString(1), cursor.getString(2), null, null); 
     // return contact 
     return event; 
    } 


    // Getting All Contacts 
    public List<Event> getAllContacts() { 
     List<Event> eventList = new ArrayList<Event>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_EVENTS; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Event event = new Event(); 
       event.set_Id(Integer.parseInt(cursor.getString(0))); 
       event.set_title(cursor.getString(1)); 
       event.set_time(cursor.getString(2)); 
       event.set_date(cursor.getString(3)); 
       // Adding contact to list 
       eventList.add(event); 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return eventList; 
    } 

// Getting event Count 
    public int getEventsCount() { 
     String countQuery = "SELECT * FROM " + TABLE_EVENTS; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(countQuery, null); 
     cursor.close(); 

     // return count 
     return cursor.getCount(); 
    } 

// Updating single contact 
    public int updateEvent(Event event) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_TITLE, event.get_title()); 
     values.put(KEY_TIME, event.get_time()); 
     values.put(KEY_DATE, event.get_date()); 

     // updating row 
     return db.update(TABLE_EVENTS, values, KEY_ID + " = ?", 
       new String[] { String.valueOf(event.get_Id()) }); 
    } 

    // Deleting single contact 
    public void deleteEvent(Event event) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(TABLE_EVENTS, KEY_ID + " = ?", 
       new String[] { String.valueOf(event.get_Id()) }); 
     db.close(); 
    } 

}

MAINACTIVITY

public class MainActivity extends FragmentActivity implements OnClickListener { 

ListView listView; 
int lastIndex = -1; 
ArrayList<Event> lstEvents = new ArrayList<Event>(); 

// detail view 
TextView tvTitle, tvTime, tvDate; 
ImageView ivPic; 
View vw_master; 

boolean _isBack = true; 

ImageButton add; 

String title; 
String date; 
String time; 
int resId; 

static final int PICK_CONTACT_REQUEST = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    // // get detail controls 
    tvTitle = (TextView) findViewById(R.id.textViewTitle); 
    tvDate = (TextView) findViewById(R.id.textViewDate); 
    tvTime = (TextView) findViewById(R.id.textViewTime); 
    ivPic = (ImageView) findViewById(R.id.imageView1); 

    add = (ImageButton) findViewById(R.id.add); 
    add.setOnClickListener(this); 


    /////////////////////////////////LISTVIEW//////////////////////////////////////// 
    // Create the adapter to convert the array to views 
    EventAdapter adapter = new EventAdapter(this, lstEvents); 

    // attach adapter to a list view 
    listView = (ListView) findViewById(R.id.listViewFragment); 
    listView.setAdapter(adapter); 
    /////////////////////////////////LISTVIEW//////////////////////////////////////// 




    // /////////////////////////////DATABASE///////////////////////////////////////////// 
    DatabaseHandler db = new DatabaseHandler(this); 
    // /////////////////////////////DATABASE///////////////////////////////////////////// 

    List<Event> events = db.getAllContacts(); 

    adapter.addAll(events); 
    adapter.notifyDataSetChanged(); 






} 

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

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    // /////////////////////////////DATABASE///////////////////////////////////////////// 
    DatabaseHandler db = new DatabaseHandler(this); 
    // /////////////////////////////DATABASE///////////////////////////////////////////// 

    // Create the adapter to convert the array to views 
    EventAdapter adapter = new EventAdapter(this, lstEvents); 

    // attach adapter to a list view 
    listView = (ListView) findViewById(R.id.listViewFragment); 
    listView.setAdapter(adapter); 

    if (requestCode == 100) { 
     if (resultCode == RESULT_OK) { 
      Bundle b = data.getExtras(); 
      title = b.getString("TITLE"); 
      time = b.getString("TIME"); 
      date = b.getString("DATE"); 

      // retrieving bitmap from CreateActivity 

      Bitmap bitmap = (Bitmap) b.getParcelable("DRAWABLE"); 

      // converting from bitmap to drawable 
      Drawable drawable = new BitmapDrawable(getResources(), bitmap); 

      // Event newEvent = new Event(); 
      // newEvent.set_date(date); 
      // newEvent.set_title(title); 
      // newEvent.set_time(time); 

      // set drawable 
      // newEvent.set_drawable(drawable); 

      // lstEvents.add(newEvent); 

      // adapter.addAll(lstEvents); 
      // adapter.notifyDataSetChanged(); 

      ///////////////////////////////DATABASE///////////////////////////////////////////// 
      /** 
      * CRUD OPERATIONS 
      */ 

      Log.e("Insert: ", "Inserting .."); 
      db.addEvent(new Event(0, title, time, date, drawable)); 

      // Reading all contacts 
      Log.e("Reading: ", "Reading all contacts.."); 
      // List<Event> events = db.getAllContacts(); 
      List<Event> events = db.getAllContacts(); 
      adapter.addAll(events); 
      adapter.notifyDataSetChanged(); 

      //logging all events 

      for (Event ev : events) { 
       String log = "Id: " + ev.get_Id() + " ,Title: " 
         + ev.get_title() + " ,Date: " + ev.get_date(); 
       // Writing Contacts to log 
       Log.e("Name: ", log); 

      } 

      ///////////////////////////////DATABASE///////////////////////////////////////////// 
     } 

    } 
} 

}

1

你可以保存在列表中的元素SQLite DB內,或在File,然後閱讀並把一切都在ListView。

您可以標記EventSerializable這樣可以節省/從文件恢復類,讓Java的做的大部分工作

相關問題