2016-02-12 30 views
1

我有一個Service用於添加視圖到WindowManager。這個想法是有像Facebook聊天頭。所以即使我的應用程序沒有在前臺運行,視圖也會一直存在。如何訪問服務中的getFragmentManager()方法?

我需要添加到WindowManagerview應該有三個選項卡。我使用TabLayoutViewPager爲此目的

認爲

<?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()方法膨脹的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()),但不知道如何在服務內部執行此操作?

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。

+1

如果您的應用程序未在前臺運行,則無法保證甚至會存在用於存在視圖的「活動」。 –

+0

我將視圖添加到WindowManager,不需要針對那。 – thedarkpassenger

回答

3

碎片只存在於活動中,而不存在於別處。您將需要創建不使用片段的自己的PagerAdapter實現。

+0

我有我自己的PagerAdapter實現,更新了上面的代碼。 – thedarkpassenger

+3

@thedarkpassenger:讓我們試試黑體:你將需要創建自己的'PagerAdapter'實現**,它不使用分片**。 – CommonsWare

+1

明白了..而不是擴展FragmentPagerAdapter我使用PagerAdapter。謝謝..:) – thedarkpassenger