我正在一起购买一个应用程序,基本上可以很好地显示数据库信息。
主要活动:
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对象,将这个新对象添加到Entries数据库中,将每个条目的第一个元素作为字符串存储到一个新列表并通知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();
....
}
}
}
当我运行它时,toast正确显示第一个条目的title字段(显示数据库至少获得新条目并且我已成功编写了SQLite读取函数)但PositionFragment中的ListView永远不会更改。
非常感谢任何有关如何使其发挥作用或更好结构建议的指导。
干杯!
答案 0 :(得分:0)
看起来您正在尝试刷新另一个Activity(PositionsFrag.entriesAdapter.notifyDataSetChanged();
)所拥有的UI元素,这是您不应该做的事情。您可以使用startActivityForResult()
启动NewActivity
并等待onActivityResult()
中的添加结果,您可以安全地拨打entriesAdapter.notifyDataSetChanged()
;