0

首先感谢所有让我的android开发冒险变得更加轻松的用户。不过,我遇到了一种情况,我没有找到解决方案,所以在这里:显示数据时ListFragment延迟

我有一个活动,其中包含旨在彼此交互的各种片段。这些包括:

  1. 包含由SimpleCursorAdapter从一个表中SQLite的分贝

    // 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填充一个GridView一个片段,其由另一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中,ACTI的东西vity将项目插入到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.调用ListFragment中的辅助函数newadapter.changecursor(c)newadapter.getCursor().requery() 3.其他这种变种...

但它似乎总是采取永远任何帮助,请..

+0

使用Traceview识别您的难度来源。 http://developer.android.com/guide/developing/tools/traceview.html – CommonsWare 2011-05-18 00:08:29

+1

@CommonsWare好的,我添加了一个traceview开始在GridView的itemselected监听器上,并在insertItem()完成后结束。这给我的执行时间仅为157ms,但是一旦这个过程完成后仍然有一个滞后,直到它在屏幕上显示 – connoisseur 2011-05-18 21:42:57

+0

加载内容该窗口中不会被调用查询。当Android开始使用你的SimpleCursorAdapter时,它会被调用。要强制查询您所需的窗口期间发生,调用'getCount将()'对内部的''SimpleCursorAdapter' PopulateList()'。顺便说一句,Java约定是方法名称为'camelCaseWithLeadingLowercaseLetter()'。 – CommonsWare 2011-05-18 22:09:22

回答

0

感谢您的帮助,原来问题不是在ListView加载数据,而GridView的时间太长注册点击看专题5197438现在我得想出办法解决它...

1

如果你让你的SQLite的操作速度快,UI线程可以更快地更新UI。 使用beginTransaction()setTransactionSuccessfulendTransaction()