0

我正在开发一个应用程序,它基本上可以很好地显示数据库信息。

主要活动:

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)中的“完成”操作栏按钮应该——理论上——创建一个新的条目对象,将这个新对象添加到条目数据库中,将每个条目的第一个元素作为字符串存储到新列表并通知 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 正确显示了第一个条目的标题字段(表明数据库至少正在获取新条目并且我已经成功编写了 SQLite 读取函数)但 PositionFragment 中的 ListView 永远不会改变。

任何有关如何使其工作的指导或更好结构的建议将不胜感激。

干杯!

4

1 回答 1

0

看起来您正在尝试刷新另一个 Activity ( PositionsFrag.entriesAdapter.notifyDataSetChanged();) 拥有的 UI 元素,这是您不应该做的事情。您可以开始NewActivitystartActivityForResult()等待添加结果onActivityResult(),您可以安全地调用entriesAdapter.notifyDataSetChanged()

于 2013-07-06T02:07:10.353 回答