我创建了一些应用程序,我想在其中插入一个 BottomNavigationView。
该代码运行良好,但是一旦我将 gradle 更改为 androidx,它就停止工作了。
我的布局中的组件 (activity_about):
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/bottom_navigation"
app:itemBackground="@color/colorWhite"
app:itemIconTint="@drawable/bottom_navigation_foreground"
app:itemTextColor="@drawable/bottom_navigation_foreground" />
Run Code Online (Sandbox Code Playgroud)
菜单文件是:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/navigation_library"
android:enabled="true"
app:showAsAction="ifRoom"
android:title="Library"
android:icon="@drawable/ic_home_black_24dp"/>
<item
android:id="@+id/navigation_search"
android:enabled="true"
app:showAsAction="ifRoom"
android:title="Search"
android:icon="@drawable/ic_search_black_24dp"/>
<item
android:id="@+id/navigation_profile"
android:enabled="true"
app:showAsAction="ifRoom"
android:title="Profile"
android:icon="@drawable/ic_account_circle_black_24dp"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
可绘制文件(bottom_navigation_foreground):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:color="@color/colorPurpleFont" />
<item android:state_checked="false" android:color="@color/Gray" />
</selector>
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
public class AboutActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { …Run Code Online (Sandbox Code Playgroud) android bottomnavigationview material-components material-components-android androidx
我是 mvvm 模式的新手。我为主要活动创建了一个 ViewModel。现在我想在主活动中获取 ViewModel 的一个实例。
Stackoverflow 上的大多数教程和答案都建议使用ViewModelProviders.of(...,但已弃用。
因此,根据stackoverflow上的这个问题:ViewModelProviders is deprecated in 1.1.0 main activity in onCreate,我执行以下操作(我可以发誓我已经运行了它):mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
但是,我收到一个错误消息,告诉我没有找到合适的构造函数。
error: no suitable constructor found for ViewModelProvider(MainActivity)
或者,绝对清楚,MainActivity 应为 ViewModelStoreOwner,我创建了一个变量
ViewModelStoreOwner vmso = this;并将该变量放入构造函数中,如下所示:
mainActivityViewModel = new ViewModelProvider(vmso).get(MainActivityViewModel.class);
我正在尝试迁移到androidx.我在Android Studio中使用了迁移工具.当我这样做时,我运行我的应用程序时得到以下堆栈跟踪.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.peerke.outdoorpuzzlegame.debug, PID: 10901
java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/lib/x86, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:6376)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5932)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5847)
at android.app.ActivityThread.access$1000(ActivityThread.java:198)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6649)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" on path: DexPathList[[zip file "/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/lib/x86, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.AppComponentFactory.instantiateProvider(AppComponentFactory.java:121)
at androidx.core.app.CoreComponentFactory.instantiateProvider(CoreComponentFactory.java:62)
at android.app.ActivityThread.installProvider(ActivityThread.java:6360)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5932)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5847)
at …Run Code Online (Sandbox Code Playgroud) 我正在将项目迁移到AndroidX中,因此遇到问题。
<provider
android:name="androidx.core.content.FileProvider" <--- Changed to X lib
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS" <---- ISSUE
android:resource="@xml/file_paths" />
</provider>
Run Code Online (Sandbox Code Playgroud)
我搜索了所有互联网,却找不到解决方案:对于AndroidX,我应该添加什么而不是android.support.FILE_PROVIDER_PATHS?
我有一个主要活动,它作为根据条件调用不同活动的入口点。其中,我使用 Firebase Auth 来管理用户登录:
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
RC_SIGN_IN)
Run Code Online (Sandbox Code Playgroud)
我覆盖onActivityResult()以区分返回的意图/数据,例如:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_CODE_1 -> {
// update UI and stuff
}
RC_SIGN_IN -> {
// check Firebase log in
}
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
使用文档强烈推荐的 Activity Result APIs ,我知道我应该在启动prepareCall()之前创建ActivityResultLauncher并确保活动在启动时处于创建状态,但我仍然不明白如何优雅地处理多个活动结果(在至少,在一个地方)就像在onActivityResult().
看这篇文章,似乎我需要实现多个ActivityResultContract类型的子内部类(因此是多个prepareCall()?),因为它们应该是不同的合同,我说得对吗?有人可以向我展示一些反映上述onActivityResult()逻辑的骨架示例吗?
import com.google.android.gms.maps.SupportMapFragment;
import androidx.fragment.Fragment;
...
private SupportMapFragment mMapFragment;
...
mMapFragment = (SupportMapFragment) form.getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);
Run Code Online (Sandbox Code Playgroud)
这里,IDE显示androidx.fragment.Fragment无法强制转换为SupportMapFragment(扩展android.support.v4.app.Fragment)的错误
我使用的是play-services-maps的15.0.1版和AndroidX库的1.0.0-beta01版.
在发布说明中我没有在AndroidX之后找到SupportMapFragment的任何更新:https://developers.google.com/maps/documentation/android-sdk/releases
编辑:在任何人问之前,form是一个Form扩展的类的实例AppCompatActivity(来自AndroidX)
android google-maps android-fragments google-maps-android-api-2 androidx
我有2个模块的一个项目:一个应用程序(JAVA)与构建类型debug,release以及enterprise和科特林库(release以及debug由应用程序使用).
我正在使用AndroidX并且在我的内容中有以下内容gradle.properties:
android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)
如果我通过Gradle运行项目,我会收到一堆编译错误(预期).但是,如果我尝试在Android Studio(3.2 Beta 5)中使用它,特别是在尝试与Gradle模型同步时,我会得到:
Unable to resolve dependency for ':app@debug/compileClasspath': Failed to transform file 'some-lib-release.aar' to match attributes {artifactType=processed-aar} using transform JetifyTransform
Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Failed to transform file 'some-lib-release.aar' to match attributes {artifactType=processed-aar} using transform JetifyTransform
Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Failed to transform file 'some-lib-release.aar' to match attributes {artifactType=processed-aar} using transform JetifyTransform
Unable to resolve dependency for ':app@release/compileClasspath': …Run Code Online (Sandbox Code Playgroud) android android-studio android-studio-3.2 androidx android-jetifier
我不断收到此错误。我正在从事一个项目,在开发过程中,我决定迁移到AndroidX。
我收到以下错误:
Note: Failed to read get kotlin metadata for [Ljava.lang.Object;@79d6c4df
Run Code Online (Sandbox Code Playgroud)
在实体文件中存在相同的错误,在相应的DAO中也存在4个相同的错误。
这是DAO的代码:
@Dao
public interface FlockDao{
@Query("SELECT * FROM flock_table")
LiveData<List<Flock>> getAllFlocks();
@Query("SELECT * FROM flock_table WHERE fid IN (:flockIds) LIMIT 1")
Flock loadFlockById(int[] flockIds);
@Insert
void insert(Flock flock);
@Update
void update(Flock flock);
@Delete
void delete(Flock flock);
}
Run Code Online (Sandbox Code Playgroud)
我的实体是:
@Entity
public class Flock{
@PrimaryKey(autoGenerate = true)
private int fid;
@ColumnInfo(name = "user_id")
private int uid;
@ColumnInfo(name = "name")
private String name;
@ColumnInfo(name = "capacity")
private int capacity;
@ColumnInfo(name = …Run Code Online (Sandbox Code Playgroud) 我有一个支持多种语言的旧项目。我想升级支持库和目标平台,在迁移到Androidx之前,一切正常,但现在更改语言无效!
我使用此代码更改App的默认语言环境
private static Context updateResources(Context context, String language)
{
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration configuration = context.getResources().getConfiguration();
configuration.setLocale(locale);
return context.createConfigurationContext(configuration);
}
Run Code Online (Sandbox Code Playgroud)
并在每个活动上通过attachBaseContext这样的覆盖调用此方法:
@Override
protected void attachBaseContext(Context newBase)
{
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
String language = preferences.getString(SELECTED_LANGUAGE, "fa");
super.attachBaseContext(updateResources(newBase, language));
}
Run Code Online (Sandbox Code Playgroud)
我尝试其他方法来获取字符串,但我注意到了吗?getActivity().getBaseContext().getString工作,而getActivity().getString不是工作。即使以下代码也不起作用,并且始终app_name在默认资源string.xml中显示vlaue。
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"/>
Run Code Online (Sandbox Code Playgroud)
我在https://github.com/Freydoonk/LanguageTest中共享示例代码
也getActivity()..getResources().getIdentifier行不通,总是返回0!
我的应用程序在Android 4.3到Android 9 Pie之前都可以正常工作,但是我的应用程序无法在Android 10(Q API 29)上运行并崩溃。这是我的日志-为什么会这样?
java.lang.RuntimeException: Unable to start activity
ComponentInfo{ir.mahdi.circulars/ir.mahdi.circulars.MainActivity}:
android.view.InflateException: Binary XML file line #17
in ir.mahdi.circulars:layout/abc_screen_simple: Binary XML file line #17
in ir.mahdi.circulars:layout/abc_screen_simple:
Error inflating class androidx.appcompat.widget.FitWindowsLinearLayout
Run Code Online (Sandbox Code Playgroud)
这是我的mainActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:layoutDirection="ltr"
tools:context=".MainActivity">
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
更新
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 16
targetSdkVersion 29
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
} }
dependencies {
implementation …Run Code Online (Sandbox Code Playgroud) android ×10
androidx ×10
android-10.0 ×1
android-room ×1
calligraphy ×1
google-maps ×1
java ×1
material-components-android ×1
mvvm ×1
viewmodel ×1