标签: androidx

使用androidx的BottomNavigationView

我创建了一些应用程序,我想在其中插入一个 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

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

如何在 2020/21 的活动中获取 ViewModel 的实例?

我是 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);

android mvvm viewmodel androidx viewmodelproviders

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

ClassNotFoundException:在androidx迁移后没有找到类"android.support.v4.content.FileProvider"

我正在尝试迁移到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)

java android android-studio androidx

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

迁移至AndroidX-android.support.FILE_PROVIDER_PATHS位置

我正在将项目迁移到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?

android androidx

22
推荐指数
2
解决办法
7571
查看次数

如何用活动结果 API 替换 startActivityForResult?

我有一个主要活动,它作为根据条件调用不同活动的入口点。其中,我使用 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()逻辑的骨架示例吗?

android android-activity onactivityresult androidx

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

SupportMapFragment不支持AndroidX Fragment

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

21
推荐指数
5
解决办法
8577
查看次数

无法使用转换JetifyTransform转换文件'some-lib-release.aar'以匹配属性{artifactType = processed-aar}

我有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

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

注意:无法读取[Ljava.lang.Object; @ 79d6c4df)的get kotlin元数据

我不断收到此错误。我正在从事一个项目,在开发过程中,我决定迁移到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)

android android-gradle-plugin android-room androidx

21
推荐指数
2
解决办法
5937
查看次数

迁移到Androidx后更改语言环境不起作用

我有一个支持多种语言的旧项目。我想升级支持库和目标平台,在迁移到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 android-activity android-support-library androidx

21
推荐指数
7
解决办法
1900
查看次数

在Android 10上崩溃(layout / abc_screen_simple第17行中的InflateException)

我的应用程序在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 calligraphy androidx android-10.0

21
推荐指数
5
解决办法
2121
查看次数