2013-07-06 28 views
0

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

任何有关如何得到这个工作的指导或更好的结构建议将不胜感激。

干杯!

回答

0

它看起来像你正试图刷新另一个活动(PositionsFrag.entriesAdapter.notifyDataSetChanged();)所拥有的UI元素,这是你不应该做的事情。您可以用startActivityForResult()开始NewActivity并等待onActivityResult()的添加结果,您可以在此安全地呼叫entriesAdapter.notifyDataSetChanged();

+0

感谢您的回复。我一直在尝试使用这个,但是,我的代码可能已经写得太糟糕了。 NewActivity从MainActivity中的onOptionsItemSelected()函数中调用,所以onActivityResult需要位于MainActivity中,对吧? – jimmygoska

+0

是的,你不能有一个片段/活动修改另一个片段/活动的UI元素可以期望它可靠地工作。 – Kai

+0

没有时间回顾我的代码,但至少我知道我要去哪里错了。谢谢!无法将您的答案标记为有用,因为我还不是15位代表。 – jimmygoska

相关问题