0

2つのフラグメントがあります。最初のフラグメントには、サーバーから取得したアイテムのリストビューがあります。リストアイテムをクリックすると、クリックしたアイテムの詳細が表示された2番目のフラグメントに移動します。私が前のフラグメントに戻るときに移動するときは、サーバーからデータを取得するのと同じプロセスを経なければなりません。これを避ける方法はありますか?そのネットワークリクエストを再作成せずに前のフラグメントに戻ることはできますか?フラグメントは同じネットワークコールを再度呼び出します

+0

はい、避ける方法はたくさんあります。 – Piyush

+1

フラグメントトランザクションに置き換えを使用している可能性がありますか? addを使用すると、フラグメントが削除されないようになります。いくつかのコードを追加できれば役に立ちます。https://developer.android.com/guide/components/fragments.html#Transactions –

+0

はい私はreplaceメソッドを使用しています。それはその問題の理由ですか?以前のフラグメントを置き換えるために戻ってくるときに再び状態を作成する必要がありますか? – slenderm4n

答えて

0

私はどのような方法で逆戻りするのかよく分かりません。これは、onBackPressメソッドをオーバーライドし、フラグメントトランジションでフラグメントをロードしたためです。バックプレスを押すと、フラグメントを開始し、新しいコピーフラグメントオブジェクトを作成します。ネットワーク通話が再び呼び出されないようにすることができます。

これを試すことができます。 onbackpressメソッドをオーバーライドします。

@Override 
public void onBackPressed() { 
    int count = getSupportFragmentManager().getBackStackEntryCount(); 
    if (count == 0) { 
     navigateActivity(HomeActivity.class); 
    } else { 
     getSupportFragmentManager().popBackStackImmediate(); 
    } 
} 

、次のように新しいフラグメントを開始し、これは役立ちます

public void switchFragment(Fragment frag) { 
    String backStateName = fragment.getClass().getName(); 

    FragmentManager manager = getSupportFragmentManager(); 
    boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0); 

    if (!fragmentPopped){ 
     fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.report_fragment, frag); 
     fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
     fragmentTransaction.addToBackStack(backStateName); 
     fragmentTransaction.commit(); 
    } 

}

希望。

関連する問題