2013-10-11 46 views
2

我目前正在开发一个应用程序(您可能已经回答或看到了我的其他一些问题),并且遇到可用性问题。我有一个导航抽屉,当用户点击其中一个项目时,另一个片段替换了主要的frame_content。我遇到的问题是,交易需要一段时间在我的设备上。改善Android应用程序片段事务的加载时间

我点击导航抽屉中的一个项目,然后应用程序“搜索”几秒钟,并将继续正常工作。

我也知道问题在哪里,因为当我替换一个没有数据的片段时,它会立即生效。只是,应用程序必须显示非常多的数据。我将HashMap<String, Collection<String>>传递给片段,并在那里读取它。我将它保存到一个数组中,然后我再次在for循环中读取该数组并显示数据。

我想过其他各种方式,例如:读取主要活动中的所有数据,然后将多个数组传递给片段。但问题是,我需要每个片段13个数组,因为hashmap包含13个不同键的数据。每个键有1个值。总共有50个条目。所以

50条目包含13个键包含1个值。

这是为设备加载的非常多的数据。所以我想过如何提高加载片段的速度。

我正在下载数据从AsyncTask的XML加载启动画面,然后我将它保存到不同的哈希映射(取决于我加载的XML)。然后我开始主要活动的新意图并通过所有哈希映射。然后根据导航抽屉列表打开一个新的片段并将散列映射传递给片段中的一个函数。然后将数据读入数组,然后在OnCreateView方法中再次读出数组以将数据添加到布局。

任何速度改进的想法?这是我当前如何改变我的片段

protected void onNavItemSelected(int id) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 
    switch ((int) id) { 
    case 101: 
     MainFragment.passList(hashMap); 
     ft.replace(R.id.content_frame, new MainFragment()); 
     ft.commit(); 
     break; 
//further cases.... 

回答

3

也许

ft.commit(); 
getSupportFragmentManager().executePendingTransactions(); 
break; 

将帮助你更快地执行交易(一定要调用它的主线程)

http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

或者如果问题不在交易本身,也许这是你的循环需要改进?

+0

我想这是我的循环。因为当我在for循环中只有一个项目时,它几乎无时间地加载。当我只有5它加载速度太快,但是当我有50(我需要)它需要太长时间。或者我应该只加3,当用户向下滚动自动载入下一个数据? – Musterknabe

+0

您使用列表视图为您的项目? – guikk

+0

我在RelativeLayout的ScrollView中有一个LinearLayout。在ScrollView中拥有LinearLayout,因为它只能有一个孩子。你会建议使用列表视图而不是线性布局吗? – Musterknabe