我收到一個基本上顯示數據庫信息的應用程序。爲什麼我的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中從未變化。
任何有關如何得到這個工作的指導或更好的結構建議將不勝感激。
乾杯!
感謝您的回覆。我一直在嘗試使用這個,但是,我的代碼可能已經寫得太糟糕了。 NewActivity從MainActivity中的onOptionsItemSelected()函數中調用,所以onActivityResult需要位於MainActivity中,對吧? – jimmygoska
是的,你不能有一個片段/活動修改另一個片段/活動的UI元素可以期望它可靠地工作。 – Kai
沒有時間回顧我的代碼,但至少我知道我要去哪裏錯了。謝謝!無法將您的答案標記爲有用,因爲我還不是15位代表。 – jimmygoska