2011-07-25 12 views
1

このClientListViewはうまく動作し、クライアントを表示します。クライアントをクリックして、右側の詳細を取得できます。ここではこのレイアウトで定義された:フラグメントをフラグメントに置き換えてフラグメントをナビゲートすると便利です

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<fragment class="com.viciousbytes.studiotab.subactivities.ClientListView" 
     android:id="@+id/client_list" android:layout_weight="1" 
     android:layout_width="0px" android:layout_height="match_parent" /> 

<FrameLayout android:id="@+id/client_details" android:layout_weight="1" 
     android:layout_width="0px" android:layout_height="match_parent" 
     android:background="?android:attr/detailsElementBackground" /> 
</LinearLayout> 

これは素晴らしい作品が、その後、私は私が持っていた別のアクティビティを実現し、画面全体を取り上げ、および2に分割されている務めた方が良いだろう(それは、フラグメントを表示fragmentactivityがありました)。

だから私は、私のセッションエディタを起動ブラフ、もともと

void showSessionEdit() 
{ 
... 

Intent intent = new Intent(getActivity(), EditSessionActivity.class); 
      // Send the recipe index to the new activity 
      intent.putExtra(EditSessionActivity.THE_SELECTED_CLIENT, (int)mClient.getID()); 
      intent.putExtra(EditSessionActivity.SELECTED_SESSION, sessionId); 
      startActivityForResult(intent, 1899); 
.... 
} 

これは素晴らしい仕事をこのフラグメントの活性を示したいくつかのコードを変更することについて、行ってきました、私は戻って私のクライアントと細部への取得[戻る]をクリックします。私のセッションエディタは、同じ画面上にあるクライアントリスト/詳細のように機能するようにしたいと思いましたが、エラーの裁判の多くのLOTSを通じて、私はようやくこれで上記置き換えられました:これはうまく機能

void showSessionEdit() 
{ 
... 
    SessionEdit details = (SessionEdit) getFragmentManager().findFragmentById(R.id.session_edit);    
       // Make new fragment instance to show the recipe 
       details = SessionEdit.newInstance(mContext, mIsTablet, (int)mClient.getID(), sessionId); 
       // Replace the old fragment with the new one 
       FragmentTransaction ft = getFragmentManager().beginTransaction();     
       ft.replace(R.id.client_list, details); 
       ft.addToBackStack("client_list"); 
       // Use a fade animation. This makes it clear that this is not a new "layer" 
       // above the current, but a replacement 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);        

     ft.commit(); 
       ... 
       //now add another fragment to the right, just to test i dont have my invoice fragment done yet so I just added session again to see if it would display it does. 

SessionEdit details2 = (SessionEdit) getFragmentManager().findFragmentById(R.id.session_edit);    

       // Make new fragment instance to show the recipe 
       details2 = SessionEdit.newInstance(mContext, mIsTablet, (int)mClient.getID(), sessionId); 
       // Replace the old fragment with the new one 
       FragmentTransaction ft2 = getFragmentManager().beginTransaction(); 
       ft2.replace(R.id.client_details, details2); 
       ft.addToBackStack("client_details"); 
       // Use a fade animation. This makes it clear that this is not a new "layer" 
       // above the current, but a replacement 
       ft2.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);       

     ft2.commit(); 
... 
} 

、私はそう私を、そのレイアウトが、フラグメント自体に話すこと"div"にない置き換えたことに気づいたもののfindFragmentByIdへの参照は、もはや私のclient_detailsタイプまたはclient_listタイプではなく、現在はSessionEditタイプです。だから、試行錯誤した結果、addToBackStack(tag)にタグを追加して、フラグメントByTagが見つかることがありました。これはうまくいきました。バックボタンのソートが機能しました。クライアントをクリックして詳細を取得するために、右側の問題は、もし私のclient_listが再び戻ってきたら、右側の細部は私のセッションの断片を示しているということです。また別の問題は私のクライアントのリストがListFragmentだったので、私が交換をしたときに、それがセルロイドであるかのように、新しい断片の下のリストを見ることができました。非常に奇妙な。

オリジナルのフラグメントを新しいものに置き換えるためにいくつかの進歩を遂げましたが、2つのフラグメントを実行していたときのように、戻るボタンを使ってナビゲートすることは、お互い。だから、どのように複数の断片の周りをナビゲートしようとしていますか?理想的には、両方のフラグメントを一度に(左側のクライアントリスト、右側のクライアントの詳細)、左側のセッション、右側の請求書で置き換えるSessionInvoiceActivityがあります。そして、バックボタンをクリックすると、idは私のクライアントリストとクライアントの詳細に戻りますか?しかし、これは私が必要とする情報をどのようにして渡すかわからない。私はまだ私が断片を置き換えるとき、なぜ元の断片が下に見ることができるかについて明確ではない?それはXMLレイアウト定義の問題ですか?

答えて

1

あなたが今これを理解したかどうかわかりませんが、私は夏の終わりです。

レイアウト(XML)で指定されたフラグメントと、FragmentManagerで追加されたフラグメントが混在していることが判明しました。

私はonCreate()に自分の「マスター」フラグメントを追加しているのですが、サイズやユーザーの選択によって2番目のフラグメントが必要と判断された場合、「詳細」フラグメントは「マスター」フラグメントまたは横長モードの場合は第2のレイアウトに追加されます。ユーザーがBackキーを押すと、 "Master"フラグメントのない空白の画面が表示されます。アクティビティのonStart()に私の「マスター」フラグメントを表示するための元の呼び出しを行うことで、これを回避することができたと思いました。しかし、これにはもう一つの問題があるようです。 onStart()から "Master"フラグメントを追加するときは、トランザクションをBackStackに追加しないでください。そうすることで、onResume()や以前のActivityのものが代わりに呼び出されるため、Activityを空白の画面に残すことはありません。

関連する問題