首先感谢所有让我的 android 开发冒险变得如此轻松的用户。但是,我遇到了一种我找不到解决方案的情况,所以这里是:
我有一个包含各种片段的活动,这些片段旨在相互交互。这些包括:
包含 GridView 的 Fragment 由 Sqlite db 中的一个表中的 SimpleCursorAdapter 填充
// Grid Functionality public void PopulateGrid(){ dba = new myDB(getActivity().getApplicationContext()); dba.open(); Cursor c = dba.getRows(); if (c!=null){ String[] columns = new String[]{col_1, col_2, col_3, col_4}; int[] to = new int[]{R.id.grid_id, R.id.grid_desc, R.id.grid_value, R.id.grid_image}; newAdapter = new SimpleCursorAdapter(getActivity(), R.layout.grid_item, c, columns, to); View v = getView(); GridView gv = (GridView)v.findViewById(R.id.sale_grid); gv.setAdapter(newAdapter); gv.setOnItemClickListener(itemSelected); } }
由另一个表中的另一个 SimpleCursorAdapter 填充的 ListFragment // 列表功能
public void PopulateList(int index){ Log.v("sell list", "Populate list started"); dba.open(); Cursor cursor = dba.getList(index); if (cursor!=null){ String[] columns = new String[]{col_1, col_2, col_3, col_4, col_5}; int[] to = new int[]{R.id.code, R.id.description, R.id.qty, R.id.price}; newAdapter = new SimpleCursorAdapter(getActivity(), R.layout.list_row, cursor, columns, to); this.setListAdapter(newAdapter); } dba.close(); }
当用户从 GridView 中选择某些内容时,Activity 会将该项插入到 ListView 的表中,然后重新初始化它。
@Override public void onGridClicked(Long value) { insertItem(value.toString()); } //do stuff public void insertItem(String result) { // Add item dba.addItem(result, qty, index); //Re-populate Panels long start; long end; start = System.currentTimeMillis(); refreshPanels(index); end = System.currentTimeMillis(); Log.v("Refresh List:", "Time"+(end-start)); } private void refreshPanels(int index){ lf.PopulateList(index); ListView lv = lf.getListView(); lv.setSelection(lv.getCount()-1); }
现在解决问题:当我查看日志并记录每个步骤时。整个过程不超过 50-70 毫秒,但从我单击 Grid 到更新 ListView 的时间,我可以计算 2-3 秒。似乎问题在于 ListFragmentsetListAdapter()
以及刷新视图所需的时间。
我已经尝试了各种方法来解决这个问题,例如 1. 使用接口来监听选择或直接从 GridView 片段调用它 2. 使用其中一个newadapter.changecursor(c)
或3 调用 ListFragment 中的辅助函数newadapter.getCursor().requery()
3. 这个的其他变体......
但它似乎总是需要任何帮助。