-4

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

<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 为“列表”的片段应该保持不变,但 ID 为“查看器”的片段应该能够调用不同的类。

(请注意,这些类扩展了 Activity。)

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

4

4 回答 4

1

这是一个基本问题。你应该从这里开始。这个主题也可以帮助你。

于 2013-02-04T06:20:42.283 回答
1

片段就像单独的活动,因此除非您进行更改,否则对一个片段的操作不会影响其他片段。假设您在左侧片段上有一个列表视图,在其活动中放置一个 onItemClickListener。对于每个 itemclick 切换右侧片段上的活动。

OnItemClick 事件的示例代码

Fragment fragment=new activity1();
fragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.replace(R.id.frame2,fragment);
ft.commit();

在上面的代码段中, activity1是要附加到正确片段的新类。R.id.frame2 是与正确片段一起使用的框架布局的 id。

于 2013-02-04T06:33:40.467 回答
0

根据片段的android文档: 片段代表活动中的行为或用户界面的一部分。您可以在单个活动中组合多个片段以构建多窗格 UI 并在多个活动中重用一个片段。您可以将片段视为活动的模块化部分,它有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像“子活动”,您可以在不同的活动中重复使用)。

http://developer.android.com/guide/components/fragments.html

我从您的问题中了解到,您希望viewer在运行时获取片段的内容。我可以为此建议的一个可能的解决方案是:而不是您的四个类 extends Activity, extend 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

希望我的回答对你有所帮助。

于 2013-02-04T08:44:06.150 回答
0

Fragment 类可以通过多种方式获得多种结果。在其核心中,它代表了在更大的 Activity 中运行的特定操作或接口。Fragment 与其所在的 Activity 密切相关,不能单独使用。尽管 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();
}
于 2013-02-04T09:09:58.770 回答