如何在服务中访问getFragmentManager()方法?

时间:2016-02-12 16:52:07

标签: android android-fragments

我有Service用于向WindowManager添加视图。我的想法是拥有像Facebook聊天的头脑。因此,即使我的应用程序没有在前台运行,视图也将始终存在。

我需要添加到view的{​​{1}}应该有三个标签。我为此目的使用WindowManagerTabLayout

视图的xml文件

ViewPager

在我的服务中,我在 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:theme="@style/AppTheme.NoActionBar" android:layout_margin="20dp" android:background="#ff0000" android:layout_height="match_parent"> <android.support.design.widget.TabLayout android:id="@+id/debugger_tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabGravity="center" app:tabMode="scrollable"/> <android.support.v4.view.ViewPager android:id="@+id/debugger_pager" android:layout_width="match_parent" android:layout_height="0dp"></android.support.v4.view.ViewPager> </LinearLayout> 方法中按照以下方式对xml文件进行了充气。

onStartCommand()

现在在下面的代码行中,@Override public int onStartCommand(Intent intent, int flag, int startId) { windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, 200, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD, PixelFormat.TRANSLUCENT); LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); debuggerView = (LinearLayout) layoutInflater.inflate(R.layout.debugger_main, null); debuggerViewPager = (ViewPager) debuggerView.findViewById(R.id.debugger_pager); //Facing problem at this line. How to access getFragmentManager() function here ? DebuggerPagerAdapter adapter = new DebuggerPagerAdapter(); debuggerViewPager.setAdapter(adapter); debuggerViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener( debuggerTabLayout)); windowManager.addView(debuggerView, params); } 接受DebuggerPagerAdapter作为构造函数的参数。如果以下行写在一个活动中,那么我可以简单地取消FragmentManager,但不知道如何在服务中执行此操作?

new DebuggerPagerAdapter(getFragmentManager())

DebuggerPagerAdapter的代码

DebuggerPagerAdapter adapter = new DebuggerPagerAdapter();

TIA。

1 个答案:

答案 0 :(得分:3)

碎片仅存在于活动中,而不存在于其他地方。您需要创建自己的PagerAdapter实现,该实现不使用片段。