我有一个Service,用于将视图添加到WindowManager。这个想法是拥有像Facebook聊天头这样的东西。因此,即使我的应用程序不在前台运行,该视图也始终存在。

我需要添加到viewWindowManager应该具有三个选项卡。我为此使用TabLayoutViewPager

视图的xml文件

 <?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>


在我的服务中,我在onStartCommand()方法中按如下所示扩展xml文件。

@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()),但是不确定如何在Service中执行此操作?

DebuggerPagerAdapter adapter = new DebuggerPagerAdapter();


DebuggerPagerAdapter的代码

    public class DebuggerPagerAdapter extends FragmentPagerAdapter  {

  public DebuggerPagerAdapter(FragmentManager fm) {
    super(fm);
  }

  @Override
  public Fragment getItem(int position) {

    switch (position){
      case 0:
        return MemoryFragment.getInstance();
      case 1:
        return NetworkFragment.getInstance();
      case 2:
        return CpuFragment.getInstance();
    }
    return null;
  }

  @Override
  public int getCount() {
    return 3;
  }
}


TIA。

最佳答案

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

08-18 00:54