编辑:布局片段的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