gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:23:49 26 4
gpt4 key购买 nike

我有一个服务,用于将 View 添加到WindowManager。这个想法是拥有类似 Facebook 聊天头的东西。因此,即使我的应用程序不在前台运行, View 也将始终存在。

我需要添加到 WindowManagerview 应该有三个选项卡。为此,我正在使用 TabLayoutViewPager

View 的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 作为其构造函数的参数。如果下面这行写在 Activity 中,那么我可以简单地取消 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。

最佳答案

fragment 只存在于 Activity 中,不存在于其他地方。您将需要创建自己的不使用 fragment 的 PagerAdapter 实现。

关于android - 如何在服务中访问 getFragmentManager() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com