我是第一次实施片段所以请帮助我。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
我希望ID为'list'的片段应该保持不变,但是具有id'viewer'的片段应该能够调用不同的类。
(注意,类扩展了Activity。)
我的问题很简单:我有四个课程(扩展活动)。我想将屏幕分成两部分。左侧保持不变,包含列表视图。在列表视图的单击中,我想打开我的类(扩展活动),但仅在右侧部分(剩余屏幕)。
答案 0 :(得分:1)
这是一个基本问题。你应该从here开始。 this topic也可以为您提供帮助。
答案 1 :(得分:1)
碎片就像是单独的活动,所以除非你做出改变,否则对一个碎片的动作不会影响其他碎片。 假设你在左侧片段上有一个列表视图,在其活动中放置一个onItemClickListener。 对于每个项目,单击右侧片段上的活动。
OnItemClick事件的示例代码
Fragment fragment=new activity1();
fragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.replace(R.id.frame2,fragment);
ft.commit();
在上面的代码段中, activity1 是要添加到右侧片段的新类。 R.id.frame2是与右片段一起使用的framelayout的id。
答案 2 :(得分:0)
根据片段的android文档: 片段表示活动中的行为或用户界面的一部分。您可以在单个活动中组合多个片段以构建多窗格UI,并在多个活动中重用片段。您可以将片段视为活动的模块化部分,它具有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像“子活动”,您可以在不同的活动中重复使用)。
http://developer.android.com/guide/components/fragments.html
我从您的问题中理解的是,您希望在运行时获得您的fragement viewer
的内容。我可以建议的一个可能的解决方案是:
而不是扩展Activity
的四个类,而是扩展Fragment
,每个类都有自己的布局。修改主布局文件,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" >
</FrameLayout>
</LinearLayout>
FrameLayout基本上充当片段的容器,您可以在运行时动态加载(通过单击ListView)。本教程将帮助您解决这个问题:
http://developer.android.com/training/basics/fragments/fragment-ui.html
希望我的答案能以某种方式帮助你。
答案 3 :(得分:0)
Fragment类可以通过多种方式实现各种结果。在其核心中,它表示在较大的Activity中运行的特定操作或接口。片段与它所处的活动密切相关,不能与一个片段分开使用。尽管Fragment定义了自己的生命周期,但生命周期依赖于它的活动:如果活动停止,则其中的任何碎片都不能启动;当活动被破坏时,所有碎片都将被销毁。
MyFragment newFragment = new MyFragment();// MyFragment is a Fragment class
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.fra,newFragment, tag);
transaction.addToBackStack(null);
transaction.commit();
示例代码更改
ft.add(android.R.id.content,fragTwo, "tag");
到
ft.add(R.id.fra,fragTwo, "tag");
并在detail.java中添加一些代码
public void onStart() {
// TODO Auto-generated method stub
tv.setText(data);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.beginTransaction();
Fragment fragTwo = new MyFragment();
//String tag = getActivity().GetFragmentID();
Fragment f= fm.findFragmentById(getId());
ft.replace(R.id.fra,fragTwo, "tag");
ft.hide(f);
ft.commit();
}
});
super.onStart();
}