我已经升级到targetSdkVersion和。compileSdkVersion33
我现在收到一条警告,告诉我onBackPressed已被弃用。
我看到建议使用android.window.OnBackInvokedCallback或androidx.activity.OnBackPressedCallback来处理后退导航。任何人都可以帮助我使用更新的方法吗?
我在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
我指定我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
我有一个apk我已经签名并上传到Android Market,并安装在我的手机上.我想在我的手机上运行时调试此版本apk(通过Eclipse).我以前做过这个(并记住它是使用Android开发工具之一;也许是Dalvik Debug Monitor)但遗憾的是它不记得如何做到并且无法在线找到任何文章.有谁知道如何做到这一点?
注意:我已
android:debuggable="true"在清单中设置并在手机上启用了USB调试.
我将Parcelable数据传递到Intent中,并使用getParcelableExtra(name:)方法将其从另一端取出。然而,getParcelableExtra(name:)似乎已被弃用。如何修复弃用警告?或者,还有其他选择吗?我使用compileSdkVersion的值为 33。
var data = intent.getParcelableExtra("data")
Run Code Online (Sandbox Code Playgroud) 我看到以下两个 Gradle 插件在项目中可以互换使用:
plugins {
id("kotlin-android")
}
Run Code Online (Sandbox Code Playgroud)
plugins {
id("org.jetbrains.kotlin.android")
}
Run Code Online (Sandbox Code Playgroud)
它们是一样的吗?
我看到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
我发现有两种使用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)
两者之间有功能上的区别吗?或者它们只是为了方便?
我已经升级到targetSdkVersion和。compileSdkVersion33
我现在收到警告,告诉我getSerializedExtra(name:)和getParcelableExtra(name:)方法已被弃用。
我从Intent类中的文档检查并确认这两种方法确实已被弃用。
该文档建议我改用新的getSerializedExtra(name:clazz:)和getParcelableExtra(name:clazz:)方法。
谁能帮助我使用新方法?
Object:Listor时发出警告ArrayList:android android-intent kotlin deprecation-warning android-tiramisu
我将 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) 
假设我有一个包含两个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 ×9
kotlin ×3
build.gradle ×1
cocoapods ×1
google-play ×1
gradle ×1
ios ×1
navigation ×1
parcelable ×1
ruby ×1
rubygems ×1