我有一個Service
用於添加視圖到WindowManager
。這個想法是有像Facebook聊天頭。所以即使我的應用程序沒有在前臺運行,視圖也會一直存在。如何訪問服務中的getFragmentManager()方法?
我需要添加到WindowManager
的view
應該有三個選項卡。我使用TabLayout
和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()
方法膨脹的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。
如果您的應用程序未在前臺運行,則無法保證甚至會存在用於存在視圖的「活動」。 –
我將視圖添加到WindowManager,不需要針對那。 – thedarkpassenger