この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レイアウト定義の問題ですか?