我收到一个基本上显示数据库信息的应用程序。为什么我的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