編輯:佈局片段的FrameLayout換成另一個片段的FrameLayout
所以下面的評論後,我再談並意識到發生了什麼掛我。
想象我的客戶名單和客戶詳細信息活動的啓動:
public class ClientsMainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//StudioTabOpenHelper db;
setContentView(R.layout.main_client_activity);
}
}
所以這偉大的工程,開始了我的main_client_Activity(以下佈局定義,我稱這種活動時,在我的主按鈕屏幕點擊):
Intent intent = new Intent(getActivity(), ClientsMainActivity.class);
startActivity(intent);
簡單的問題是,在ClientsMainActivity
不叫OnCreateView或任何東西,只是設置佈局定義我的片段,我的ListFragment佈局。這是好的,因爲我不想要任何東西傳遞到ClientsMainActivity
,但如果我有這樣一個假設的活動:
SessionMainsActivity
當他們點擊一個客戶端的會話編輯被調用,那麼我就不會被調用SessionsMainActivity
同樣的方式(開始活動,只是設置爲alayout),我會想要該佈局設置,因爲它定義了我的碎片如何分裂。但我也想傳遞數據到那個然後到後續的片段(比如他們點擊的是哪個會話進行編輯/使用
所以我想知道上面是否有道理,我相信它是一個簡單的我只是無法環繞我的大腦,我從其他片段調用FragmentActivitie
s沒有問題,他們佔用了整個屏幕,但它的工作原理。所以我認爲最大的問題是ClientsMainActivity
來自我在網上找到的一些例子,向您展示如何在屏幕上製作多個片段所做的一切就是將內容視圖設置爲可以完成所有工作的佈局,這就是爲什麼我無法弄清楚如何將它編碼爲做同樣的事情,但讓我傳遞值的碎片佈局定義等...
編輯完
所以我用這個可愛的小教程在這裏:
http://developer.android.com/guide/topics/fundamentals/fragments.html
它已經得到了我很長的路要走,並利用他們說的主要活動做什麼, fragment_layout.xml,我在左邊有一個很好的客戶列表(這是一個listfragment),右邊有一個細節片段。
然後,我添加了在客戶端編輯會話信息(或編輯客戶端詳細信息)的能力,兩者都是全屏幕片段。這很好。
現在我決定了我的會話編輯UI最好將信息再分成兩個窗格。
這是行不通的,因爲我覺得,就像我說我有一個main_Activity,這是否在OnCreate:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_client_activity);
}
與main_client_activity.xml
在兩個佈局被定義,但一個風景片是在這裏:
<?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>
這一切都很好!在這種情況下,我處理一切在整個屏幕上的活動,開始了自己的片段:
EditSessionActivity
EditClientActiivyt
它們都使用getSupportFragmentManager()調用BeginTransaction,我可以將信息傳遞到它從.newInstance通話。
我有我的session_edit.xml
佈局與按鈕,textviews等定義,並且工作很好。多數民衆贊成在我的SessionEdit
片段「我的EditSessionActivity
」「發射」加載但現在,因爲我想分開它,我遇到了一個障礙。上面我定義了一個client_list和一個client_details id,這些佔位符在我的屏幕上?當我想用完全不同的碎片替換那裏的時候,我會引用那些嗎?
還是我建立所謂像fragment_session_layout另一個片段佈局定義喜歡的東西:
<?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.SessionEdit"
android:id="@+id/session_edit" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />
<FrameLayout android:id="@+id/invoice_details" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent"
android:background="?android:attr/detailsElementBackground" />
</LinearLayout>
對不起不知道該怎麼這個稱號對我的舌尖什麼,我問,基本上如何兩次得到兩片碎片。在線演示展示瞭如何做一個(以及一個簡單的ListFragment)。
我已經做了所有上述,我只是無法弄清楚如何傳遞到片段,我在我的EditSessionActivity利用這一點,我需要的數據:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int clientID = getIntent().getIntExtra(THE_SELECTED_CLIENT, -1);
int sessionID = getIntent().getIntExtra(SELECTED_SESSION,-1);
SessionEdit edits = SessionEdit.newInstance(this.getBaseContext(), false, clientID, sessionID);
mUIListener = (OnUpdateUI)edits;
getSupportFragmentManager().beginTransaction().add(android.R.id.content, edits).commit();
}
奏效,但要儘量堅持到前面的片段示例中,我假設我的EditSessionActivit
y很像製作另一個MainActivity
(因爲它有兩個面板,就像主面板一樣)。所以我在EditSessionActivity
重新編碼的onCreate
本:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_session_fullview);
}
這在我對付onCreateView EditSession片段戰鬥後,我得到了這最後的工作,但在數據不能通過引起不存在的實例對象使用像以前的onCreate
其中有edits=SessionEdit.newInstance(...)
所以是做好其他片段佈局,其中有兩個痛苦,並啓動時,正確的行動是觸發的好做法。或者是應該替換兩個已經創建的片段?莫名其妙地從我的main_client_activity.xml
?
我有同樣的「問題」現在,我已經得到了在視圖listfragments和我改變後dinamically一排selected.I想了很多哪一個是好,但我不認爲這是最好的方法我用過的。 – kameny
這些在線片段的例子通常足以滿足簡單的情況,但除此之外,您還是自己做的。希望有人有一個好的建議。 – Codejoy
我跟你aggree,這個教程適合基本情況,如果有人想創建複雜的UI與他需要想很多片段:d – kameny