まず最初に、私のAndroid開発の冒険をとても簡単にしてくれたすべてのユーザーに感謝します。しかし、私は解決策が見つからない状況に遭遇したので、ここに行きます:
相互作用することを目的としたさまざまなフラグメントを含むアクティビティがあります。これらには以下が含まれます:
Sqliteデータベースの1つのテーブルからSimpleCursorAdapterによって入力されたGridViewを含むフラグメント
// 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から何かを選択すると、アクティビティはそのアイテムを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ミリ秒ですが、グリッドをクリックしてからListViewが更新されるまで、文字通り2〜3秒を数えることができます。問題はListFragmentとsetListAdapter()
、ビューの更新にかかる時間にあるようです。
1.インターフェイスを使用して選択をリッスンするか、GridViewフラグメントから直接呼び出すなど、さまざまな方法を試しました。2.いずれかnewadapter.changecursor(c)
またはnewadapter.getCursor().requery()
3.他のバリアントを使用してListFragmentの2次関数を呼び出します。
しかし、それは常に永遠に助けが必要なようです。