为什么我的ListView不会从源代码中显示新元素?

时间:2013-07-06 01:07:34

标签: android android-adapter notifydatasetchanged

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

主要活动:

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永远不会更改。

非常感谢任何有关如何使其发挥作用或更好结构建议的指导。

干杯!

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试刷新另一个Activity(PositionsFrag.entriesAdapter.notifyDataSetChanged();)所拥有的UI元素,这是您不应该做的事情。您可以使用startActivityForResult()启动NewActivity并等待onActivityResult()中的添加结果,您可以安全地拨打entriesAdapter.notifyDataSetChanged();