0

作为序言;我有一个包含 4 个活动的 Android 应用程序,我希望将这些活动转移到一个包含片段(两个扩展ListActivity和两个扩展Activity)的活动中,并通过导航抽屉启用片段之间的导航。我试图将这些活动变成扩展的活动ListFragmentFragment但是活动中的许多代码停止运行:例如,getSystemService(NOTIFICATION_SERVICE)unbindService'registerReciever',主要是onCreateOptionsMenu不同活动中包含的不同s。

因此,我问,是否可以将任何单独的活动移植到单个碎片化的活动中,但仍保留与单独的重点活动相同的功能,并且只需最少的编辑?

此外,关于过渡过程,是否需要在主 Activity 中结束前一个 Fragment 以在同一空间中显示另一个 Fragment?

4

3 回答 3

0

如果你想在你的片段中使用 getSystemService(NOTIFICATION_SERVICE) 你需要使用你的活动的上下文。上下文.getSystemService(通知服务)。有些方法适用于活动,如果您想在其他地方使用它们,您需要获取上下文。

于 2013-11-07T17:06:13.523 回答
0

是的,有可能,片段的生命周期与活动非常相似(参见此处)。您会发现这可能是从您的活动类复制/粘贴到您的片段类的情况,只需进行非常小的调整即可让它们像单独的活动一样工作。您唯一要做的工作就是从您的活动中交换这些片段。

例如,一个带有 onCreate 函数的活动如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    // Find views
    homeMessagesButton = (Button) v.findViewById(R.id.homeMessagesButton);
    homeCreateMatchButton = (Button) v.findViewById(R.id.homeCreateMatchButton);
    homeMyMatchesButton = (Button) v.findViewById(R.id.homeMyMatchesButton);
    homeMyTeamsButton = (Button) v.findViewById(R.id.homeMyTeamsButton);
    homeSquadButton = (Button) v.findViewById(R.id.homeSquadButton);
    homeSettingsButton = (Button) v.findViewById(R.id.homeSettingsButton);

    // Set click listeners
    homeMessagesButton.setOnClickListener(this);
    homeCreateMatchButton.setOnClickListener(this);
    homeMyMatchesButton.setOnClickListener(this);
    homeMyTeamsButton.setOnClickListener(this);
    homeSquadButton.setOnClickListener(this);
    homeSettingsButton.setOnClickListener(this);    
}

现在在片段中看起来像这样(注意片段使用 onCreateView 生命周期方法在片段将出现的活动中膨胀其视图)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_home, container, false);     

 // Find views
    homeMessagesButton = (Button) v.findViewById(R.id.homeMessagesButton);
    homeCreateMatchButton = (Button) v.findViewById(R.id.homeCreateMatchButton);
    homeMyMatchesButton = (Button) v.findViewById(R.id.homeMyMatchesButton);
    homeMyTeamsButton = (Button) v.findViewById(R.id.homeMyTeamsButton);
    homeSquadButton = (Button) v.findViewById(R.id.homeSquadButton);
    homeSettingsButton = (Button) v.findViewById(R.id.homeSettingsButton);

 // Set click listeners
    homeMessagesButton.setOnClickListener(this);
    homeCreateMatchButton.setOnClickListener(this);
    homeMyMatchesButton.setOnClickListener(this);
    homeMyTeamsButton.setOnClickListener(this);
    homeSquadButton.setOnClickListener(this);
    homeSettingsButton.setOnClickListener(this);

    return v;
}

更改活动中的片段是通过使用 fragmentTransaction 管理器完成的,如这里的 android 培训站点所示

由于您的服务需要绑定到一个活动,而不是一个片段。这变得微不足道,因为片段可以检索它们绑定的活动。例如,片段中使用的以下代码将自动获取它们存在的活动。

getActivity().getSystemService(Context.LOCATION_SERVICE);
于 2013-11-07T16:59:22.183 回答
0

从 Activity 移动代码非常简单。例如onCreateOptionsMenu也可以在 Fragments 中使用,对于需要上下文或 Activity 的方法,您可以从 Fragment 调用getActivity()以获取对父 Activity 的引用。

编辑:要替换片段,还有一个来自 FragmentTransaction 类的方法,在参数中采用容器视图的 id。

于 2013-11-07T16:54:06.443 回答