标签: android-jetpack

JetPack Jetifier的Android Crashlytics问题

好吧,我创建了一个项目,并添加了Fabric插件和Crashlytics依赖项,我也测试了它并且它有效.但是当我重构项目以使用AndroidX并启用jetifier工具时android.enableJetifier=true,项目不会构建,我会遇到多个错误:

Failed to transform file 'crashlytics-2.9.2.aar' to match attributes {artifactType=jetified-aar} using transform JetifyTransform

jetifier工具和Crashlytics依赖性似乎有问题.有没有办法关闭JetifyTransform单个依赖?

项目级gradle文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.2.41'
    repositories {
        google()
        jcenter()
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-alpha14'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:3.1.2'
        classpath 'io.fabric.tools:gradle:1.25.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) …
Run Code Online (Sandbox Code Playgroud)

android crashlytics android-gradle-plugin android-jetpack

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

在 recyclerview 中使用 ViewModel 和 Retrofit 实现无限滚动

在添加 viewmodel 和 livedata 之前,我通过改造成功实现了无限滚动。但是在使用 Retrofit 添加 viewmodel 和 livedata 后,我无法使用新数据调用更新 recyclerview 或 viewmodel 观察者不更新列表。

我只是想像我之前的代码那样无限滚动。我添加了一个全局变量来重用下一页令牌。我是否缺少任何东西或任何示例来实现具有视图模型和改造的无限回收器视图将很棒。

public static String NEXT_PAGE_URL = null;
Run Code Online (Sandbox Code Playgroud)

我是这样编码的。

我的活动 -> PlaceListActivity

placeRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            LogMe.d(tag, "onScrollStateChanged:: " + "called");
            // check scrolling started or not
            if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                isScrolling = true;
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            LogMe.d(tag, "onScrolled:: " + "called");
            super.onScrolled(recyclerView, dx, dy);

            currentItem = …
Run Code Online (Sandbox Code Playgroud)

infinite-scroll android-recyclerview retrofit2 android-viewmodel android-jetpack

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

为什么在使用JetPack Navigation导航后立即调用片段中的onDestroyView

导航到另一个片段时立即调用onDestroyView()是正常行为吗?

我调用以下方法进行导航:

findNavController().navigate(R.id.action_homefragment_to_detailsfragment)
Run Code Online (Sandbox Code Playgroud)

有办法避免这种情况吗?还是应该从ViewModel恢复所有内容?例如,我在ScrollView中的最后一个滚动位置。

android android-architecture-components android-jetpack

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

如何在android中为NavigationUI添加动画过渡?

我正在使用 NavigationUI 将目的地与菜单项联系起来,但如何覆盖默认动画过渡?

基于文档https://developer.android.com/topic/libraries/architecture/navigation/navigation-ui#Tie-navdrawer,我找不到任何可以添加动画过渡的方法。

android android-jetpack android-architecture-navigation

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

在android版本8.0中,我使用工作管理器定期触发广播,但是当我从最近的任务中清除应用程序时,它不起作用

我已安排工作经理定期在特定时间执行任务。但它正在与其他Android版本一起使用,例如25或更低版本。当我在API 28上运行它时,如果我从最近的列表中清除应用程序,它将停止触发广播。

我在活动中安排了这样的工作经理:

 OneTimeWorkRequest mywork = new OneTimeWorkRequest.Builder(MyWorker.class).setInitialDelay(15, TimeUnit.SECONDS).build();
 WorkManager.getInstance().enqueue(mywork);
Run Code Online (Sandbox Code Playgroud)

这是我的工人班:

public class MyWorker extends Worker {
    @NonNull
    @Override
    public Worker.WorkerResult doWork() {
        // Do the work here
        Mylogger.getInstance().printLog("MyWorr","doWork()");
        //fire broadcast from here
        Intent broadcastIntent = new Intent(getApplicationContext(), TimeMatchingBroadcastReceiver.class);
        getApplicationContext().sendBroadcast(broadcastIntent);
        CommonUtils.scheduleWorkManager();
        // Indicate success or failure with your return value:
        return WorkerResult.SUCCESS;

        // (Returning RETRY tells WorkManager to try this task again
        // later; FAILURE says not to try again.)
    }
}
Run Code Online (Sandbox Code Playgroud)

即使关闭或清除所有版本的android上的最新应用程序,我也要执行工作管理器。谢谢。

android android-service android-lifecycle android-jetpack android-workmanager

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

为什么要使用UseCases?Android Jetpack在文档中未提及UseCases

在我的Android Clean体系结构中真的需要使用UseCases吗?

在Android Jetpack 文档中,他们没有提及它。他们直接从ViewModels访问资源库。

这不是更好的选择吗?难道UseCase代码不仅使调整代码变得不必要地困难了吗?

android mvvm clean-architecture android-architecture-components android-jetpack

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

在Android中使用导航组件时如何删除默认动画过渡?

我正在使用导航组件,并且在主活动中有一个底部导航视图。当我点击该底部导航视图中的选项卡时,出现该片段时似乎动画淡入了。我认为我没有手动设置动画,似乎默认情况下该动画会存在。

我想删除该动画。这是我在主要活动中使用的代码。

class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener {

    private lateinit var navController : NavController
    lateinit var destinationTitleTextView : TextView
    lateinit var progressBar : ProgressBar
    lateinit var topToolbar : Toolbar
    lateinit var bottomNavigationView : BottomNavigationView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        FirebaseApp.initializeApp(this)

        // Initial Setup views
        navController = Navigation.findNavController(this,R.id.nav_host_fragment)
        setupBottomNavMenu(navController)
        setupActionBar(navController)
        setUpViewDeclaration()


        // Add Listeners
        navController.addOnDestinationChangedListener(this)


    }



    private fun setUpViewDeclaration() {
        destinationTitleTextView = findViewById(R.id.destination_label_text_view)
        progressBar = findViewById(R.id.progressBar_main_activity)
        topToolbar = findViewById(R.id.top_toolbar)
        bottomNavigationView = findViewById(R.id.bottom_nav)

    }

    private fun setupBottomNavMenu(navController: NavController) {
        bottom_nav.setupWithNavController(navController) …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-navigation android-architecture-components android-jetpack

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

androidx.navigation.fragment.NavHostFragment 无法从 xml 文件访问

我正在尝试使用带有底部导航视图的 androidx 导航。所以当我在 xml 文件中放置带有 android:name = "androidx.navigation.fragment.NavHostFragment" 的片段时,它给了我一个错误。我猜 xml 没有看到这个库或这个 Fragment

Here is xml file :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".weather.WeatherActivity"
        android:orientation="vertical"
        android:weightSum="10"
>
    <androidx.appcompat.widget.Toolbar
            android:id="@+id/w_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            android:theme="@style/ToolbarColoredBackArrow"
    />
        <fragment
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="9.6"
                android:id="@+id/nav_host_fragment"
                app:defaultNavHost = "true"
                app:navGraph = "@navigation/mobile_navigation"
                android:name="androidx.navigation.fragment.NavHostFragment"
                  />
        <com.google.android.material.bottomnavigation.BottomNavigationView
                android:id="@+id/bottom_nav"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.4"
                app:menu="@menu/bottom_nav"
        >

        </com.google.android.material.bottomnavigation.BottomNavigationView>

</LinearLayout>


Activity class:
class WeatherActivity : AppCompatActivity() {
    private lateinit var navController: NavController
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(com.example.upgrade.R.layout.activity_weather)
        val …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack androidx android-jetpack-navigation

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

拦截 NavigationUI.onNavDestinationSelected() 以使用“inclusive = true”使 backstack 弹出

我已经连接了我的菜单 xml 和 Android 导航组件navigation_view.setupWithNavController(navController),一切正常。我的菜单的一部分是注销选项。如果用户选择此导航目的地,应用程序应导航到AuthorizationFragment 并将返回堆栈弹出到此 Fragment 并将 inclusive 设置为 true以删除所有先前的Fragment

我查看了导航库的代码,并达到了应该发生这种情况的地步:

NavigationUI.onNavDestinationSelected():

/**
 * Attempt to navigate to the {@link NavDestination} associated with the given MenuItem. This
 * MenuItem should have been added via one of the helper methods in this class.
 *
 * <p>Importantly, it assumes the {@link MenuItem#getItemId() menu item id} matches a valid
 * {@link NavDestination#getAction(int) action id} or
 * {@link NavDestination#getId() destination id} to be navigated to.</p>
 * <p> …
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer android-navigation android-navigationview android-jetpack

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

为什么在我使用了 LiveData 后还需要启动 notifyDataSetChanged()?

我正在通过https://github.com/googlecodelabs/android-room-with-a-view/tree/kotlin的示例项目 RoomWordsSample 学习 Room

以下代码来自项目。

在我看来,如果观察到数据发生变化,LiveDate 将自动更新 UI。

但是在文件 WordListAdapter.kt 中,我发现notifyDataSetChanged()添加到function setWords(words: List<Word>)? 似乎它必须在数据更改时手动通知 UI。

为什么还需要启动 notifyDataSetChanged()当我使用 LiveData 时,?

主活动.kt

class MainActivity : AppCompatActivity() {

    private val newWordActivityRequestCode = 1
    private lateinit var wordViewModel: WordViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.recyclerview)
        val adapter = WordListAdapter(this)
        recyclerView.adapter = adapter
        recyclerView.layoutManager = LinearLayoutManager(this)

        wordViewModel = ViewModelProvider(this).get(WordViewModel::class.java)


        wordViewModel.allWords.observe(this, Observer { words ->         
            words?.let { adapter.setWords(it) }
        })

    }
}
Run Code Online (Sandbox Code Playgroud)

WordViewModel.kt …

android kotlin android-livedata android-jetpack

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