相关疑难解决方法(0)

使用FragmentPagerAdapter时如何获取现有片段

我有问题使我的片段通过Activity使用FragmentPagerAdapter,作为帮助类来实现对标签的管理以及连接ViewPager关联的所有细节TabHost.我的实现FragmentPagerAdapter与Android示例项目Support4Demos提供的一样.

主要问题是FragmentManager当我没有Id或Tag时,如何从特定片段中获取特定片段?FragmentPagerAdapter正在创建片段并自动生成Id和标签.

android android-fragments fragmentpageradapter

96
推荐指数
6
解决办法
7万
查看次数

应用程序恢复后,Singleton对象变为null

对于我的Android项目,我需要全局单例Cache对象来通过应用程序访问有关用户的数据.

当应用程序进入后台并且在使用其他应用程序一段时间后我尝试在Cache对象中打开应用程序变量时出现问题.当我杀死应用程序并再次打开它时,一切都很好.我正在使用依赖注入来访问Cache对象.如果发生这种情况,为什么app不会再次启动?是否有一些注释可以在低内存条件下保持缓存变量?

这是我的Cache类

class Cache {
    var categories : Array<BaseResponse.Category>? = null
    var user : BaseResponse.User? = null
    var options : BaseResponse.OptionsMap? = null
    var order: MenuOrderDataModel? = null
}
Run Code Online (Sandbox Code Playgroud)

这是DI的存储模块

@Module class StorageModule {

    @Singleton @Provides fun getSharedPrefs(context: Context): SharedPreferences {
        return PreferenceManager.getDefaultSharedPreferences(context)
    }


    @Singleton @Provides fun getCache() : Cache = Cache()
}
Run Code Online (Sandbox Code Playgroud)

我注入对象@Inject lateinit var cache: Cache,然后在启动画面中填充用户数据.

编辑 - 从应用程序和启动活动添加的代码片段

class MyApp : Application() {
    val component: ApplicationComponent by lazy {
        DaggerApplicationComponent
                .builder()
                .appModule(AppModule(this))
                .build()
    } …
Run Code Online (Sandbox Code Playgroud)

android caching dependency-injection kotlin dagger-2

5
推荐指数
1
解决办法
3205
查看次数

活动在后台被杀死后应用程序崩溃

我有一个使用 ViewPager 显示片段的应用程序的问题。一切正常,直到应用程序进入后台并被操作系统杀死。似乎在恢复之后,我有 2 个处理事件的 IncidentScreenFragment,其中一个带有使我的应用程序崩溃的空演示者 (MVP)。

我的 HomeActivity 看起来像:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)
        presenter.onViewCreated()
        initViews(savedInstanceState)
    }

    private fun initViews(savedInstanceState: Bundle?){
        mapView.onCreate(savedInstanceState)
        mapView.getMapAsync(this)
        initFragment()
        initMenu()
    }
    private fun initFragment(){
        homeFragment = HomeScreenFragment.newInstance()
        incidentFragment = IncidentScreenFragment.newInstance()
        chatFragment = ChatFragment.newInstance()
        weatherFragment = WeatherFragment.newInstance()

        viewPager.adapter = ViewPagerAdapter(supportFragmentManager, this)
        viewPager.offscreenPageLimit = 4

        viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrollStateChanged(state: Int) {}
            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
            override fun onPageSelected(position: Int) {bottom_navigation.currentItem = position}
        })
    }

    override fun …
Run Code Online (Sandbox Code Playgroud)

android fragment android-viewpager kotlin

3
推荐指数
1
解决办法
1144
查看次数

在Android中旋转设备后片段字段为NULL

当我启动应用程序时一切正常,但是当我旋转到横向时它崩溃了,因为在Fragment那里有一个字段是NULL.

我不使用setRetainInstance(true)或添加 FragmentsFragmentManager在应用程序启动和应用程序旋转时创建新的 Fragments。

Activity OnCreate()我创建Fragment并将它们添加到viewPager这样的。

   protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         ParentBasicInfoFragment parentBasicInfoFragment = new ParentBasicInfoFragment();
         ParentUTCFragment parentUTCFragment = new ParentUTCFragment();
         ParentEventsFragment parentEventsFragment = new ParentEventsFragment();
         this.mFragments = new ArrayList<>();
         this.mFragments.add(parentBasicInfoFragment);
         this.mFragments.add(parentUTCFragment);
         this.mFragments.add(parentEventsFragment);
         this.viewpage.setOffscreenPageLimit(3);
         setCurrentTab(0);
         this.viewpage.setAdapter(new MainActivityPagerAdapter(getSupportFragmentManager(), this.mFragments));
    }
Run Code Online (Sandbox Code Playgroud)

然后我在应用程序上有一个测试按钮,当我按下它时会像

  public void test(View view) {
      ((BaseFragment) MainActivity.this.mFragments.get(MainActivity.this.viewpage.
                getCurrentItem())).activityNotifiDataChange("hello");
  }
Run Code Online (Sandbox Code Playgroud)

这将工作和当前FragmentsViewPager有方法, activityNotifiDataChange()正在调用,一切正常。

当我旋转应用程序并按下按钮做同样的事情时,activityNotifiDataChange()它被调用了,但是有一个空指针异常,因为 ArrayList<Fragment> mFragment它现在是 NULL。

这是一个显示此行为的小示例 Android …

android android-fragments

2
推荐指数
1
解决办法
986
查看次数