首先感谢所有让我的Android开发冒险的用户变得更加容易。但是,我遇到了一种我找不到解决方案的情况,所以这里有:
我有一个Activity,其中包含各种旨在互相交互的片段。其中包括:
包含一个由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);
}
}
一个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();
}
当用户从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毫秒,但从我点击网格到更新ListView的时间,我可以计算2-3秒。
似乎问题在于ListFragment以及setListAdapter()
所需的时间并刷新视图。
我尝试了各种方法,例如1.使用Interface监听选择或直接从GridView片段调用它2.使用newadapter.changecursor(c)
或{调用ListFragment中的辅助函数{1}} 3.其他变种...
但它似乎永远需要任何帮助...
答案 0 :(得分:1)
如果快速进行SQLite操作,UI线程可以更快地更新UI。
使用beginTransaction()
,setTransactionSuccessful
,endTransaction()
。
答案 1 :(得分:0)
感谢您的帮助,事实证明问题不在于ListView加载数据,而是GridView花了太长时间来注册点击查看主题5197438现在我必须找到解决方法......