2

私は現在アプリを開発しており (あなたは私の他の質問に答えたり見たりしたかもしれません)、ユーザビリティの問題を抱えています。ナビゲーション ドロワーがあり、ユーザーがアイテムの 1 つをクリックすると、メインの frame_content が別のフラグメントに置き換えられます。私が遭遇している問題は、トランザクションがデバイスで時間がかかることです。

ナビゲーション ドロワーで 1 つのアイテムをクリックすると、アプリが数秒間「スタック」し、正常に動作し続けます。

また、データが含まれていないフラグメントを置き換えると、すぐに機能するため、問題がどこにあるかもわかります。ただ、アプリは非常に多くのデータを表示する必要があります。HashMap<String, Collection<String>>フラグメントにa を渡し、そこから読み取っています。それを配列に保存してから、その配列を for ループで再度読み取り、データを表示しています。

メインアクティビティですべてのデータを読み取り、複数の配列をフラグメントに渡すなど、他のさまざまな方法を考えました。しかし、問題は、ハッシュマップに 13 の異なるキーのデータが含まれているため、フラグメントごとに 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....
4

1 に答える 1

3

多分

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

トランザクションをより速く実行するのに役立ちます(必ずメインスレッドで呼び出してください)

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

または、問題がトランザクション自体にない場合、改善が必要なのはあなたのループでしょうか?

于 2013-10-11T12:51:36.590 に答える