1

私は基本的にレイアウトを2つに分けています。左側には、右側のレイアウトに表示されるさまざまなフラグメントをトリガーするボタンがあります。

ここに画像の説明を入力

各ボタンをクリックすると、それぞれのフラグメントがフラグメント表示領域にロードされます。Fragment A や Fragment D などの一部のフラグメントは、データベースにクエリを実行したり、インターネットからデータを取得したりして、複雑なデータを表示します。アプリが実行されている限り、このデータは読み込まれると変更されません。私の質問は、フラグメントを以前の状態に戻して表示できるかどうかです。より明確にするために->フラグメントAボタンをクリックすると、フラグメントAクラスですべての計算が実行されて表示されます。次にフラグメントBをクリックすると、フラグメントBが表示され、次にCが表示されます。フラグメントAボタンをもう一度クリックすると、計算/接続/データベースクエリをやり直すのではなく、データをロードバックする必要があります。

使用されているコード:

   public void onClick(View v) {
   switch (position) {
            case 0:
                newContent = new FragmentA();
                break;
            case 1:
                newContent = new FragmentB();
                break;
            case 2:
                newContent = new FragmentC();
                break;
            case 3:
                    newContent = new FragmentD();
                break;
                case 4:
                newContent = new FragmentE();
                break;
                       default: break;
                  }
                     if (newContent != null){
         mContent = newContent;
         switchFragment(newContent);
        }

}

public void switchFragment(Fragment fragment) {
    mContent = fragment;
    getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.replacelayout, fragment)
    .commit();
}

フラグメントコードの例

 public class FragmentA extends Fragment {

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragmenta, container, false);
    }   

@Override
public void onActivityCreated (Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);            


   RUN ASYNTASKS TO CONNECT/QUERYDB AND DIPLAY THE DATA

}
    }

やり方がわからない - backStack を使う?? onResume() ?? .replace が呼び出されたときにどの関数が呼び出されるかわからないためです。

前もって感謝します

4

2 に答える 2

0
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            Fragment newContent = null;
            getSupportFragmentManager()
            .beginTransaction()
            .hide(mContent)
            .commit();

            switch (position) {
            case 0:
                getSupportFragmentManager()
                .beginTransaction()
                .show(home)
                .commit();
                mContent = home;
                getSlidingMenu().showContent();
                break;
            case 1:

                if(ifdownexsists == true){
                     getSupportFragmentManager()
                        .beginTransaction()
                        .show(download)
                        .commit();
                        mContent = download;
                        getSlidingMenu().showContent();}
                else
                {   download = new DownloadFile();
                    getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.replacelayout, download)
                    .commit();   
                    mContent = download;
                    ifdownexsists = true;
                    getSlidingMenu().showContent();
                }

                break;
            case 2:
                 if(ifexsists == true){
                     getSupportFragmentManager()
                        .beginTransaction()
                        .show(oldCheckValue)
                        .commit();
                        mContent = oldCheckValue;
                        getSlidingMenu().showContent();}
                else
                {   oldCheckValue = new CheckValues();
                    getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.replacelayout, oldCheckValue)
                    .commit();   
                    mContent = oldCheckValue;
                    ifexsists = true;
                    getSlidingMenu().showContent();
                }
                break;

魅力のように機能します...プログレスバーの進行状況をバックグラウンドで保持し、フラグメントが再び表示されたときにそれらを正しく表示します

于 2013-10-23T08:20:44.127 に答える
0

fragment.replace を使用する代わりに、fragment.show および fragment.hide fragmentByTagName を使用できます。これにより、状態がメモリに保持されます。このように見えるかもしれません。

   FragmentManager fragmentManager = getSupportFragmentManager();
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        //find the fragment by View or Tag
          MyFrag myFrag = (MyFrag)fragmentManager.findFragmentByTag(TAG);
          fragmentTransaction.hide(myOldFrag);
          fragmentTransaction.show(myNewFrag);
          fragmentTransaction.commit();
于 2013-10-22T11:11:36.203 に答える