2013-07-06 57 views
0

我收到一個基本上顯示數據庫信息的應用程序。爲什麼我的ListView不能從其源顯示新元素?

主要活動:

public class MainActivity extends FragmentActivity { 
    public static List<Entry> entryTitles; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MySQLiteHelper db = new MySQLiteHelper(this); 
     entryTitles= db.getEntryTitles(); 
     ..... 
    } 
    .... 
} 

片段導航抽屜

public class PositionsFrag extends Fragment { 
    public static EntryListAdaptor entryAdapter; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     int i = getArguments().getInt(ARG_ENTRY_NUMBER); 
     switch(i){ 
      case 0: 
       entryAdapter = new EntryListAdapter(getActivity(), MainActivity.entryTitles); 
       lv.setAdapter(entryAdapter); 
       break; 
      ..... 
     } 
    } 
} 

最後,點擊操作欄的一個按鈕會打開一個新的活動,允許用戶將字段添加到一個新的條目。在這個新的活動(創造性地稱爲NewActivity.java)中的'完成'操作欄按鈕應該 - 理論上 - 創建一個新的Entry對象,將這個新對象添加到條目數據庫中,將每個條目的第一個元素作爲字符串存儲到新列表並通知entryAdapter列表已更新。

public class NewActivity extends Activity { 
    db = new MySQLiteHelper(this); 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
      case R.id.action_done: 
       db.newEntry(new Entry(title, date, location)); 
       MainActivity.entryTitles= db.getEntryTitles(); 
       PositionsFrag.entriesAdapter.notifyDataSetChanged(); 
       Toast.makeText(getApplicationContext(), db.printFirstTitle(), Toast.LENGTH_SHORT).show(); 
       finish(); 
      .... 
      } 
     } 
    } 

當我運行此舉杯正確顯示的第一個條目的標題字段(顯示數據庫至少獲得新的條目,我已經成功地寫了一個SQLite的讀取功能),但在PositionFragment ListView中從未變化。

任何有關如何得到這個工作的指導或更好的結構建議將不勝感激。

乾杯!

回答

0

它看起來像你正試圖刷新另一個活動(PositionsFrag.entriesAdapter.notifyDataSetChanged();)所擁有的UI元素,這是你不應該做的事情。您可以用startActivityForResult()開始NewActivity並等待onActivityResult()的添加結果,您可以在此安全地呼叫entriesAdapter.notifyDataSetChanged();

+0

感謝您的回覆。我一直在嘗試使用這個,但是,我的代碼可能已經寫得太糟糕了。 NewActivity從MainActivity中的onOptionsItemSelected()函數中調用,所以onActivityResult需要位於MainActivity中,對吧? – jimmygoska

+0

是的,你不能有一個片段/活動修改另一個片段/活動的UI元素可以期望它可靠地工作。 – Kai

+0

沒有時間回顧我的代碼,但至少我知道我要去哪裏錯了。謝謝!無法將您的答案標記爲有用,因爲我還不是15位代表。 – jimmygoska

相關問題