小编was*_*syl的帖子

使用`onRetainCustomNonConfigurationInstance`来保留跨配置更改的数据

我已经为Android编程了一段时间,我仍在寻找保留数据而不是配置更改的解决方案.除了节约Parcelables到活动的BundleonSaveInstanceState文档使用暗示FragmentsetRetainInstance标志设置为true.

但我刚刚遇到一些onRetainCustomNonConfigurationInstance用于保存任意对象的代码(以一种奇特的方式,但基本上是没有引用的大对象Activity等).我从未见过这种方法,所以我有些疑惑:

  • 这种方法是否可以安全地调用存储任意对象(从某种意义上说,我可以肯定它会被调用,并且它不会很快被弃用/删除)?
  • 这种方法有何不同onRetainNonConfigurationInstance(),也应该返回Object,实质上应该是同样的?
  • 由于某种原因,使用保留片段仍然更好吗?

作为奖励,我将不胜感激任何其他提示或解决方案,以节省状物体的状态AsyncTask,Observable,视图的主持人,并继续

android android-framework android-activity android-fragmentactivity

23
推荐指数
1
解决办法
6530
查看次数

在恢复活动时刷新FragmentStatePagerAdapter上的图像

我创建了一个FragmentStatePagerAdapter用于提供小型图库的活动.但是,当活动恢复时(例如,从其他活动返回后),我无法刷新它.每次前两张图片都是空白的,只有在我将两张图片刷到一边后,它们才会刷新.我找到的答案都没有起作用(特别是压倒一切getItemPosition())

我这样设置:

mPagerAdapter = new PhotosPagerAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.photosViewPager);
mPager.setAdapter(mPagerAdapter);
Run Code Online (Sandbox Code Playgroud)

然后我有FragmentStatePagerAdapter类:

private class PhotosPagerAdapter extends FragmentStatePagerAdapter{

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

    @Override
    public int getCount() {
        return photos.size();   
    }

    @Override
    public Fragment getItem(int position) {
        ImageFragment f = new ImageFragment(position);
        return f;
    }

    @Override
    public int getItemPosition(Object object) {
        throw new RuntimeException();
        //return POSITION_NONE;
    }

}
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到,我在getItemPosition中抛出RuntimeException,因为我想检查它何时被调用.直到我添加一些包含我的图片的列表才会调用它.然后是ImageFragment类:

public class ImageFragment extends Fragment{

    int position;
    Bitmap mBitmap;
    int width;
    int height;
    ImageView img;

    public ImageFragment(){ …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager fragmentpageradapter

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

模拟通用Windows平台应用程序测试

我创建(通用Windows平台的应用程序库"Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"dependencies"uap10.0": {}frameworksproject.json).我刚刚开始编写测试,但我似乎找不到任何支持通用Windows平台应用程序的模拟库.唯一的一个是MoqaLate,但它非常新,而且非常有限.

我看不到自己在没有嘲笑的情况下进行测试,但我也是UWP开发的新手.我错过了什么,或者在我的测试中真的不可能使用模拟?如果是这样,有什么替代方案?

编辑:我看到的一个替代方案是开发Windows类库(Portable),它只针对Windows Universal 10.0.这种方法有什么问题我应该小心吗?我的目标是拥有一个可以在Windows 10应用程序中使用的库(在移动设备,桌面设备和xbox上).

unit-testing mocking win-universal-app uwp

8
推荐指数
1
解决办法
1058
查看次数

在FusedLocationProviderApi中设置模拟位置

我正试图从中获取模拟更新FusedLocationProviderApi,但我似乎无法使其工作.这是我在android instrumentation测试中的设置方法:

locationProvider = new LocationProvider(InstrumentationRegistry.getTargetContext().getApplicationContext(), settings);

// Connect first, so that we don't receive 'true' location
locationProvider.googleApiClient.blockingConnect();
// Set mock mode, to receive only mock locations
LocationServices.FusedLocationApi.setMockMode(locationProvider.googleApiClient, true);

InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
    @Override
    public void run() {
        // Start receiving locations; this call will connect api client, and if it's already connected (or after it connects) it will register for location updates
        locationProvider.start();
    }
});
// wait until we can request location updates
while (!locationProvider.isReceivingLocationUpdates) {
    Thread.sleep(10);
} …
Run Code Online (Sandbox Code Playgroud)

testing android google-play-services fusedlocationproviderapi android-fusedlocation

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

如何检查设备上是否启用了蓝牙

我想检查设备上是否启用了蓝牙(以便应用程序可以在没有用户交互的情况下使用它).有没有办法做到这一点?我还可以单独检查蓝牙和蓝牙低功耗吗?

bluetooth win-universal-app windows-10 uwp

4
推荐指数
2
解决办法
6076
查看次数