小编Adi*_*ain的帖子

onBackPressed() 已弃用。还有什么选择呢?

我已经升级到targetSdkVersion和。compileSdkVersion33

我现在收到一条警告,告诉我onBackPressed已被弃用。

我看到建议使用android.window.OnBackInvokedCallback或androidx.activity.OnBackPressedCallback来处理后退导航。任何人都可以帮助我使用更新的方法吗?

例子

onBackPressed已弃用

使用案例

我在onBackPressed()if (isTaskRoot) {}方法内部使用来检查该活动是否是活动堆栈上的最后一个活动。

override fun onBackPressed() {
    if (isTaskRoot) { // Check whether this activity is last on the activity stack. (Check whether this activity opened from a Push Notification.)
        startActivity(Intent(mContext, Dashboard::class.java))
        finish()
    } else {
        finishWithResultOK()
    }
}
Run Code Online (Sandbox Code Playgroud)

navigation android kotlin deprecation-warning android-tiramisu

178
推荐指数
9
解决办法
11万
查看次数

如何设置DialogFragment的宽度和高度?

我指定我DialogFragment的布局在XML布局文件(让我们称之为layout_mydialogfragment.xml),它layout_width和layout_height属性,特别是(为100dp每个假设).然后我在DialogFragment的onCreateView(...)方法中扩充这个布局,如下所示:

View view = inflater.inflate(R.layout.layout_mydialogfragment, container, false);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我发现当我的对话框(DialogFragment)出现时,它不尊重layout_width和layout_height在其xml布局文件中指定(并且我的对话框根据内容收缩或扩展可变).任何人都知道我是否或如何让我的对话框尊重layout_width和layout_height在其xml布局文件中指定?目前我必须在DialogFragment的onResume()方法中再次指定对话框的宽度和高度,如下所示......

getDialog().getWindow().setLayout(width, height);
Run Code Online (Sandbox Code Playgroud)

...因此,不可取的是,必须记住在两个地方对对话框的宽度和高度进行任何改进.

android android-fragments android-dialog android-dialogfragment

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

如何调试apk签名发布?

我有一个apk我已经签名并上传到Android Market,并安装在我的手机上.我想在我的手机上运行时调试此版本apk(通过Eclipse).我以前做过这个(并记住它是使用Android开发工具之一;也许是Dalvik Debug Monitor)但遗憾的是它不记得如何做到并且无法在线找到任何文章.有谁知道如何做到这一点?

注意:我已android:debuggable="true"在清单中设置并在手机上启用了USB调试.

android google-play

101
推荐指数
6
解决办法
8万
查看次数

getParcelableExtra 方法已弃用

我将Parcelable数据传递到Intent中,并使用getParcelableExtra(name:)方法将其从另一端取出。然而,getParcelableExtra(name:)似乎已被弃用。如何修复弃用警告?或者,还有其他选择吗?我使用compileSdkVersion的值为 33。

代码片段

var data = intent.getParcelableExtra("data")
Run Code Online (Sandbox Code Playgroud)

android parcelable android-intent

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

“kotlin-android”和“org.jetbrains.kotlin.android”是否相同?

我看到以下两个 Gradle 插件在项目中可以互换使用:

    plugins {
        id("kotlin-android")
    }
Run Code Online (Sandbox Code Playgroud)
    plugins {
        id("org.jetbrains.kotlin.android")
    }
Run Code Online (Sandbox Code Playgroud)

它们是一样的吗?

android android-gradle-plugin

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

在Gradle的Android插件中,"minifyEnabled"和"useProguard"有什么区别?

我看到Gradle的Android插件有一个minifyEnabled属性和useProguard属性,如下所示:

android {
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
        }
        release {
            minifyEnabled true
            useProguard true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个属性有什么区别?或者说,每个人的意义是什么?

android gradle build.gradle android-gradle-plugin android-proguard

56
推荐指数
4
解决办法
3万
查看次数

“=记住”和“通过记住”有什么区别?

我发现有两种使用Remember API声明变量的方法。

第一个是:

@Composable
fun abc() {
    var aa = remember { mutableStateOf(true) }
}
Run Code Online (Sandbox Code Playgroud)

第二个是:

@Composable
fun abc() {
    var aa by remember { mutableStateOf(true) }
}
Run Code Online (Sandbox Code Playgroud)

两者之间有功能上的区别吗?或者它们只是为了方便?

android kotlin android-jetpack-compose

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

getSerializedExtra 和 getParcelableExtra 已弃用。还有什么选择呢?

我已经升级到targetSdkVersion和。compileSdkVersion33

我现在收到警告,告诉我getSerializedExtra(name:)和getParcelableExtra(name:)方法已被弃用。

我从Intent类中的文档检查并确认这两种方法确实已被弃用。

该文档建议我改用新的getSerializedExtra(name:clazz:)和getParcelableExtra(name:clazz:)方法。

谁能帮助我使用新方法?

警告示例

  1. 收到以下警告时Object:

getSerializedExtra_Deprecated_Image

  1. 收到Listor时发出警告ArrayList:

getSerializedExtra_Deprecated_List_Image

android android-intent kotlin deprecation-warning android-tiramisu

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

将 Cocoapods 更新到 1.13.0 后,它会抛出错误

我将 CocoaPods 更新到版本1.13.0. 现在,当我运行时pod install,它会抛出以下错误:

conversions.rb:108:in '<class:Array>': undefined method 'deprecator' for ActiveSupport:Module (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?

这是完整的错误:

bundler: failed to load command: pod (/opt/homebrew/opt/bin/rbenv/versions/3.2.2/bin/pod)
/opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activesupport-7.1.0/lib/active_support/core_ext/array/conversions.rb:108:in `<class:Array>': undefined method `deprecator' for ActiveSupport:Module (NoMethodError)

  deprecate to_default_s: :to_s, deprecator: ActiveSupport.deprecator
                                                          ^^^^^^^^^^^
Did you mean?  deprecate_constant
    from /opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activesupport-7.1.0/lib/active_support/core_ext/array/conversions.rb:8:in `<top (required)>'
    from <internal:/opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
    from <internal:/opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
    from /opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/cocoapods-1.13.0/lib/cocoapods.rb:9:in `<top (required)>'
    from <internal:/opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
    from <internal:/opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
    from /opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/cocoapods-1.13.0/bin/pod:36:in `<top (required)>'
    from /opt/homebrew/opt/bin/rbenv/versions/3.2.2/bin/pod:25:in `load'
    from /opt/homebrew/opt/bin/rbenv/versions/3.2.2/bin/pod:25:in `<top (required)>'
    from /opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/3.2.0/bundler/cli/exec.rb:58:in `load'
    from /opt/homebrew/opt/bin/rbenv/versions/3.2.2/lib/ruby/3.2.0/bundler/cli/exec.rb:58:in …
Run Code Online (Sandbox Code Playgroud)

ruby rubygems ios cocoapods

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

如何使用多个片段弹出活动堆栈?

活动布局图片

假设我有一个包含两个FrameLayouts的Activity(让我们称之为FrameA和FrameB),它们每个都包含一个Fragment(让我们分别称它们为FragmentA1和FragmentB1).现在,我使用类似于以下代码提交一系列单独的片段事务...

getFragmentManager()
 .beginTransaction()
 .replace(frameId, fragment)
 .addToBackStack(null)
 .commit();
Run Code Online (Sandbox Code Playgroud)

...这样我用FramementA2替换FrameA中的FragmentA1,然后用FragmentB2替换FrameB中的FragmentB1,然后用FragmentA3替换FrameA中的FragmentA2,然后用FragmentB3替换Frame2中的FragmentB2,最终状态如上图所示(其中只有FragmentA3和FragmentB3可见).

如果我正确理解后栈是如何工作的,按"后退"将交错在FrameA和FrameB之间弹出片段(反映我是如何添加它们的).

有谁知道是否有可能选择性地在FrameA或FrameB上弹出最后一笔交易?(即如果我按下'Pop FrameA',那么FrameA将从FragmentA3转换回FragmentA2,相反,如果我按下'Pop FrameB',那么FrameB将从FragmentB3转换回FragmentB2)

补充:我知道我可以使用该FragmentManager.findFragmentById(int framelayoutId)方法将片段最后添加到给定的FrameLayout ,但调用FragmentTransaction.remove(fragment).commit()仅从视图中删除片段,并且不会将视图转换回先前显示的片段.

android android-fragments

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