实现碎片机器人

时间:2013-02-04 05:53:27

标签: android android-fragments

我是第一次实施片段所以请帮助我。

<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。)

我的问题很简单:我有四个课程(扩展活动)。我想将屏幕分成两部分。左侧保持不变,包含列表视图。在列表视图的单击中,我想打开我的类(扩展活动),但仅在右侧部分(剩余屏幕)。

4 个答案:

答案 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();

sample code

示例代码更改

          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();
}