2012-04-02 35 views
0

我有一個應用程序,在我點擊保存按鈕後試圖刷新列表。單擊保存按鈕後Android List不刷新

的邏輯是這樣的:1。 在同一屏幕上獲取水果列表 2,我可以編輯/添加新的水果名稱 3.如果我選擇添加水果的名稱,它帶給我一些表單標籤,一旦進入,我點擊保存按鈕。 4.點擊保存,它應該爲我提供檢索水果列表的活動(步驟1)。

public class firstActivity extends Activity{ 
private SQLiteDatabase db; 
Button saveButton; 
public void onCreate(Bundle savedInstance){ 
// some code here 
saveButton = (Button) findViewById(R.id.savedata); 
db = openOrCreateDatabase("location.db", 
      SQLiteDatabase.CREATE_IF_NECESSARY, null); 


     saveButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String fruitName; 
       fruitName = fruitName.getText().toString(); 
    ContentValues fruitContent = new ContentValues(); 
    fruitContent.put("fruit_name",fruitName); 


    if (!(db.isOpen())) { 
    db = openOrCreateDatabase("location.db",SQLiteDatabase.CREATE_IF_NECESSARY, null); 
    } 
    fruitId = (int) db.update(FRUIT_TABLE, fruitContent,"fruit_id=" + f_P_Id, null); 
    db.close(); 
    } else { 
    if (!(db.isOpen())) { 
    db = openOrCreateDatabase("location.db",SQLiteDatabase.CREATE_IF_NECESSARY, null); 
     } 
    fruitId = (int) db.insertOrThrow(FRUIT_TABLE, null,fruitContent); 

    db.close(); 
    } 
    Log.i(TAG, "New Fruit Id:" + fruitId); 

    Intent intent = new Intent(firstActivity.this,secondActivity.class); 
        startActivity(intent); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 

     }); 
} 
} 

public class secondActivity extends Activity { 
public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     Log.i(TAG, "cmg"); 
     setContentView(R.layout.fruitlist); 

     /** 
     * database code 
     */ 
     SQLiteDatabase db; 
     db = openOrCreateDatabase("location.db", 
       SQLiteDatabase.CREATE_IF_NECESSARY, null); 
     if (db != null) 
      Log.i(TAG, "database created"); 
     else 
      Log.i(TAG, "DAtabase null"); 

     //db.execSQL(CREATE_TABLE_1); 


     Cursor cursor = db.query(tablename, null, null, null, null, null, null); 

     int listSize = cursor.getCount(); 
     final String[] fruit_List = new String[listSize + 1]; 

     cursor.moveToFirst(); 
     int arrIter = 0; 
     while (cursor.isAfterLast() == false) { 
      Log.i(TAG, "Coumn Value:" + cursor.getString(0)); 
      fruitList[arrIter] = cursor.getString(1); 
      cursor.moveToNext(); 
      arrIter++; 
     } 
     fruit_List[arrIter] = "New Fruit"; 
     Log.i(TAG, "FruitList:"); 
     for (int i = 0; i < fruit_List.length; i++) { 
      Log.i(TAG, "Fruit:" + fruit_List[i]); 
     } 
     Log.i(TAG, "Count:" + cursor.getCount()); 
     cursor.close(); 
     db.close(); 

     ListView listView = (ListView) findViewById(R.id.list); 

     if (listView != null) { 
      listView.setAdapter(new ArrayAdapter<String>(this, 
        android.R.layout.simple_list_item_1, fruit_List)); 
     } else { 
      Log.i(TAG, "Null"); 
     } 


     listView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // When clicked, show a toast with the TextView text 

       Intent intent = new Intent(view.getContext(), 
         firstActivity.class); 
       startActivity(intent); 

      } 
     }); 

    } 

} 

不知怎的,它不需要我secondActivity並獲得新的列表。有人可以幫我嗎?

謝謝。

+0

而不是v.getContext()你可以試試firstActivity.this。我不確定這是否能解決您的問題,只是一個建議(以及我如何創建我的意圖沒有問題。您是否檢查過以確保您的第二活動包含在您的清單中? – Mimminito 2012-04-02 09:00:27

+0

有什麼異常? – Th0rndike 2012-04-02 09:01:17

+0

您是什麼意思它doesn 't帶你到第二個活動?應用程序部隊關閉或它只是站立不動,不打開活動 – 2012-04-02 09:02:42

回答

1

調用ListView.notifyDataseInvalidate()將刷新ListView。

+0

它不會在secondActivity本身,然後調用ListView.notifyDatabaseInvalidate()有什麼好處?我沒有使用在firstActivity中列表視圖,它只存在於secondActivity中。FirstActivity只處理添加一個新項目並保存它。 – 2012-04-02 10:23:52

0

當你想刷新你的ListView只要記住你將不得不插入本聲明。

listviewobject.setAdapter(adapter); 

這會自動刷新列表。

+0

它不會進入secondActivity本身,那麼調用ListView.notifyDatabaseInvalidate()有什麼好處?我沒有在firstActivity中使用List視圖,它只在secondActivity中出現。 FirstActivity只處理添加一個新的項目,並保存它 – 2012-04-02 10:24:23

0

當您按下保存按鈕時,您是否有任何異常? 如果不是這可能意味着點擊偵聽器沒有正確設置,請確保在按下保存按鈕時輸入onClick方法。

您還可以使用android:onClick屬性來避免以編程方式設置點擊偵聽器。

在你的XML佈局的按鈕部分:

android:onClick="onSaveButtonClicked" 

在你的活動:

public void onSaveButtonClicked(View view){ 
... 
} 
+0

我試過這個,但沒有幫助我.. :( – 2012-04-02 09:24:41

0

的問題是,你需要知道你在哪裏保存列表,您輸入前第二項活動,您應該更新此列表並在其他活動中訪問它,無論是使用數據庫/還是將Extra放在此意圖上,然後將整個列表發送到第二個活動。

注意:如果您使用的是適配器,請使用adapter.notifyDatasetChanged()函數來更新適配器中的列表。

0

對於你的問題,你必須使用自定義adapter.Better和最佳的解決方案..

LINK,供您參考

+0

它與我的問題有什麼關係? – 2012-04-02 10:24:46

0

@JModi:像做下面...

1)當按鈕點擊: 在數據庫中插入正確的條目。

2)使另一個方法說「refreshList()」,其中你做同樣的事情,你用來做你的列表。

並在您輸入數據庫後調用此方法。

- >使用你的數據庫並重新列表。 - >不要忘記使用listViewObject。在「refreshList()」方法的開始處使用clear()方法。

我已經做到了,這種方法工作正常...! 希望它能幫助你... !! 祝你好運!

+0

@JModi:如果您有任何關於此的進一步查詢,你可以問我。 – 2012-04-02 09:57:18