相关疑难解决方法(0)

在Android上旋转活动重启

在我的Android应用程序中,当我旋转设备(滑出键盘)然后我Activity重新启动(onCreate被调用).现在,这可能是它应该如何,但我在onCreate方法中做了很多初始设置,所以我需要:

  1. 将所有初始设置放在另一个功能中,这样就不会在设备旋转时丢失所有功能
  2. 这样做onCreate不会再次调用,布局只是调整或
  3. 将应用限制为仅限肖像,以便onCreate不调用.

android rotation android-activity

1341
推荐指数
25
解决办法
37万
查看次数

一个活动和所有其他碎片

我想实现一个屏幕,Activity和所有其他sreens与Fragmentsmanaging all the fragments thru the activity.

这是个好主意吗?我的答案是否定的,但我仍然想更清楚地了解这个想法.

这个想法的优点和缺点是什么?

注意:

请不要给我片段和活动的链接.

编辑:

这是碎片和活动的一部分:

优点:

  1. 片段旨在与活动一起用作子活动.
  2. 碎片不是活动的替代品.
  3. 碎片意味着可重用性(需要知道可以以何种方式实现可重用性).
  4. 片段是编写代码以支持平板电脑和手机的最佳方式.

缺点:

  1. 我们需要实现接口以从片段中获取数据.
  2. 对于对话,我们必须走很长的路才能展示它.

如果我们不考虑平板电脑,为什么要使用碎片?活动和片段之间的起始时间差是多少?

android android-layout android-lifecycle android-fragments android-activity

157
推荐指数
5
解决办法
6万
查看次数

在Android中更改屏幕方向而不重新加载活动

我想在运行我的Android应用程序时以编程方式更改方向,使用以下代码行:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)

它们到目前为止工作,但主要问题是当屏幕方向改变时重新加载整个活动,我不希望这样.可能吗?谢谢.

编辑:好的,在我找到我失踪的东西之后.我必须在configChanges属性中包含"screenSize",所以有

android:configChanges="orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)

解决了整件事.

android screen-orientation

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

RecyclerView项目中的Android百分比屏幕宽度

如何将RecyclerView的物品高度设置为屏幕高度的30%?

我不能简单地使用ConstraintLayout或PercentFrameLayout/PercentRelativeLayout,因为那些位置子布局相对于父布局,其大小可能与屏幕不匹配.

最好,我想在纯XML中执行此操作(并且不必使用任何Runnables来动态获取屏幕高度).

编辑

澄清一下,由于许多解决方案建议限制RecyclerView的高度,这不是意图.RecyclerView仍应填充屏幕.这就是我所说的,使用屏幕宽度(而不是高度):

在此输入图像描述

我们的想法是将卡的宽度设置为屏幕宽度的33%,同时保持RecyclerView的宽度不变,因为它横向滚动屏幕.

android android-recyclerview android-constraintlayout

16
推荐指数
3
解决办法
6613
查看次数

如何在配置更改和启动活动时避免重新加载Admob广告?

这里使用横幅样本,我注意到如果我改变方向,广告就会消失,然后重新加载(需要时间),所以每当我改变方向时,都会有时间显示任何内容.

我知道可以通过清单为活动设置configChanges(实际上它可以工作),但这不是一般的建议.它有多个缺陷:

  1. 在我的情况下,例如,更改方向让工具栏保持在相同的高度,这是错误的,因为它应该在横向上不同于在肖像上.
  2. 转到另一个活动Admob视图仍然会重新加载,即使之前已加载.
  3. 从纵向到横向,反之亦然,广告无法很好地适应新的方向.

在每次配置更改时,还可以采取哪些措施来避免重新加载广告?

我希望Admob一次加载广告(其余部分在后台加载新广告),然后展示,并避免在我更改方向时重新加载.每次到达时,只显示当前配置(例如方向)的最佳状态.

转到包含Admob广告的新活动也是如此.如果之前加载,则无需重新加载.


编辑:我对此表示赞赏,因为Google/Firebase支持通过电子邮件告诉我,实际上可以缓存广告:

广告SDK不会为您缓存广告,但您可以实施"AdManager"样式类,很可能是单个应用程序或附加到应用程序实例的实例,可以为您管理缓存.

当您认识到它是一种Android模式来销毁和重新创建方向上的活动时,实例状态通常通过包保存和恢复,但这不适用于视图.

如果您希望在此方案中优化横幅广告视图的重新加载时间,我建议您通过AdManager类制作广告请求,然后AdManager可以应用一些逻辑来缓存广告,例如您的横幅广告视图一段时间,并返回上一个横幅,如果它对新请求仍然有效(您将在方向更改时进行).

而且:

SDK没有实现缓存广告的这种想法,因为很难确定在所有情况下应用的最佳缓存逻辑,因此如果需要,开发人员可以实现适合其用例的缓存.

可能有一个与'AdView'类分离的横幅广告会产生更合适的可缓存对象,但目前情况并非如此.

因此,我们建议您为了预取/缓存横幅广告,您需要存储"AdView".然而,另一种支持且确实推荐的方法是使用ViewModel,而不是使用AdManager,请参阅 https://developer.android.com/guide/topics/resources/runtime-changes#RetainingAnObjecthttps://developer.android .com/topic/libraries/architecture/viewmodel.这些都是针对这种用例而设计的.

如果确实有可能,我想知道如何做到这一点.请成功执行此操作的人员,在代码中显示可以执行的操作.

android orientation admob

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

Android - 屏幕方向重新加载活动

我要重新提出这个问题,因为那里有很多不好的信息,真的很令人沮丧.简短的故事是,当设备方向改变时,我不希望任何改变或发生.给这个问题最流行的两个"解决方案"是:

1.您可以通过在清单中添加android:screenOrientation ="portrait"(或"landscape")来锁定活动的一个方向.

2.您可以通过在标记中指定android:configChanges ="screenOrientation"来告诉系统您打算自己处理屏幕更改.这样就不会重新创建活动,而是会收到一个回调(你可以忽略它,因为它对你没用).

这些工作都没有.让我更详细地解释一下我的特殊问题......

我正在尝试一个非常简单的应用程序作为学习练习.我在服务器上有一个文本文件.文本文件中有1个内容:单行上的单个整数.此数字是也存储在此服务器上的图像文件数,图像全部命名为0.jpg,1.jpg,2.jpg等.

我的所有代码都在我的活动的onCreate方法中(就像我说它是一个简单的应用程序).

应用程序在运行时执行以下操作:

从文本文件中读取数字.生成从零到文件中的数字的随机数.通过使用URL中的随机数将随机图像加载到imageview中.

当屏幕旋转时,我不希望所有这一切再次发生.我只是希望没有发生......除了屏幕应该明显地旋转并且图像应该缩放以适应它所做的.但每次屏幕旋转时,所有代码都会运行并且会选择一个新的随机图像.有人可以给我一个简单的解决方案与工作代码来解决这个问题吗?我通过观察来学习,如果你不能提供代码示例它不会帮助.

提前致谢.

ps ...我不是在寻找一种不同的方式来做我正在做的事情,这不是重点.即时通讯寻找FIX我目前正在做的方式.

android

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

视频重新定位方向

我写了一个代码来播放我网站上的视频.

它工作正常,但当我旋转手机时,视频从头开始重新启动.

我该如何解决这个问题?

public class ActivityVideoDetail extends Activity {

    private VideoDetail videoDetail;
    private TextView    txtResult;
    // -------------------------
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_activity_video_detail);
        if (savedInstanceState != null)
        {

        }
        else {
            ini();
        }
    }


    // -------------------------
    private void ini() {
        videoDetail = (VideoDetail) getIntent().getExtras().getSerializable(VideoDetail.VIDEO_DETAIL);
        txtResult = (TextView) findViewById(R.id.txtResult);
        txtResult.setText(videoDetail.getVideoTitle());

        Uri uri = Uri.parse(videoDetail.getVideoPath());
        //   Uri uri = Uri.parse("http://daily3gp.com/vids/747.3gp");

        VideoView videoView = (VideoView) findViewById(R.id.videoPlayer);

        MediaController mediaController = new MediaController(this);
        mediaController.setAnchorView(videoView);
        mediaController.setMediaPlayer(videoView);

        videoView.setMediaController(mediaController);
        videoView.setVideoURI(uri);
        videoView.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

video android rotation

6
推荐指数
2
解决办法
1445
查看次数

使用打开的DialogFragment旋转设备后,RecyclerView不会刷新

我有一个RecyclerView内部AppCompatActivity.旋转设备后,会显示项目插入和更改并正确设置动画.

当你:

  1. 点按中的项目RecyclerView.
  2. DialogFragment,如果你想在删除的项目打开,提示.
  3. 旋转设备.
  4. 确认对话框中的删除.
  5. 检查阵列列表.该项目已被删除.
  6. RecyclerView仍显示该项目.

尝试使用notifyDataSetChangednotifyItemRemoved不是工作,因为该项目仍在显示RecyclerView.

任何版本的Android都会发生这种情况.

有关如何处理流程的简化代码:

public class MyAppCompatActivity extends AppCompatActivity {
        int positionOfDeletedItem;
        MyObjectRecyclerViewAdapter adapter;
        ArrayList<MyObject> someTestData;
        MyItemDeletionHandler deletionHandlerRemover;

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.my_activity_layout);

            RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
            positionOfDeletedItem = 1;
            deletionHandlerRemover = new MyItemDeletionHandler(this);

            someTestData = new ArrayList<MyObject>(3);
            someTestData.add(new MyObject("A"));
            someTestData.add(new MyObject("B"));
            someTestData.add(new MyObject("C"));

            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));

            adapter = new MyObjectRecyclerViewAdapter(new MyAdapterOnClickEvent.OnItemClick() {
                @Override …
Run Code Online (Sandbox Code Playgroud)

android orientation-changes notifydatasetchanged android-recyclerview

6
推荐指数
1
解决办法
1254
查看次数

Android App方向更改会重新启动活动

我有一个活动,只要方向发生变化,它就会重新启动.我编写了代码,以防止在清单文件中更改方向时重新启动活动,如下所示:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.sample.appname.MainActivity"
        android:label="@string/app_name"
        android:configChanges="orientation|keyboardHidden"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

在上面的代码片段中,android:configChanges ="orientation | keyboardHidden"应该为我做的工作,但活动仍在重启.请让我知道如何纠正它.

android

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