0

まず最初に、私のAndroid開発の冒険をとても簡単にしてくれたすべてのユーザーに感謝します。しかし、私は解決策が見つからない状況に遭遇したので、ここに行きます:

相互作用することを目的としたさまざまなフラグメントを含むアクティビティがあります。これらには以下が含まれます:

  1. 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);
    
    }
    }
    
  2. 別のテーブルから別の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();
    
    }
    
  3. ユーザーが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次関数を呼び出します。

しかし、それは常に永遠に助けが必要なようです。

4

2 に答える 2

1

SQLite操作を高速にすると、UIスレッドはUIをより高速に更新できます。beginTransaction()、、setTransactionSuccessfulを使用しendTransaction()ます。

于 2011-06-21T04:37:53.453 に答える
0

助けてくれてありがとう、問題はデータをロードするListViewにあるのではなく、GridViewがクリックを登録するのに時間がかかりすぎることがわかりました。トピック5197438を参照してください。

于 2012-03-18T17:06:33.393 に答える