显示数据时的ListFragment延迟

时间:2011-05-18 00:02:42

标签: android android-listview android-fragments simplecursoradapter

首先感谢所有让我的Android开发冒险的用户变得更加容易。但是,我遇到了一种我找不到解决方案的情况,所以这里有:

我有一个Activity,其中包含各种旨在互相交互的片段。其中包括:

  1. 包含一个由SimpleCursorAdapter填充的GridView的片段,该片段来自Sqlite db中的一个表

    // 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. 一个ListFragment,由另一个表中的另一个SimpleCursorAdapter填充     //列出功能

    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中选择某些内容时,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);
    
    }
    
  4. 现在出现问题:当我查看日志并记录每一步时。整个过程不超过50-70毫秒,但从我点击网格到更新ListView的时间,我可以计算2-3秒。 似乎问题在于ListFragment以及setListAdapter()所需的时间并刷新视图。

    我尝试了各种方法,例如1.使用Interface监听选择或直接从GridView片段调用它2.使用newadapter.changecursor(c)或{调用ListFragment中的辅助函数{1}} 3.其他变种...

    但它似乎永远需要任何帮助...

2 个答案:

答案 0 :(得分:1)

如果快速进行SQLite操作,UI线程可以更快地更新UI。 使用beginTransaction()setTransactionSuccessfulendTransaction()

答案 1 :(得分:0)

感谢您的帮助,事实证明问题不在于ListView加载数据,而是GridView花了太长时间来注册点击查看主题5197438现在我必须找到解决方法......