所以,我BottomNavigationView与 Jetpack Navigation 联系在一起。假设我有 4 个底部导航菜单,片段 A、B、C 和 D,A 作为起始目的地。从片段 A 转到片段 B,然后转到片段 C。然后,我按下硬件后退按钮。我期望它返回到片段 B,相反,它返回到片段 A(这是起始目的地)。
这是代码:
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_activity_main) as NavHostFragment
navController = navHostFragment.navController
binding.navView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变这种行为?
谢谢~
编辑:我遵循 Zain 的答案,行为已经符合预期。但是,还有另一个问题。假设我有另一个片段 A1,它不是BottomNavView片段的一部分。我可以从片段 A 导航到片段 A1。下面是导航图:
<navigation 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:id="@+id/mobile_navigation"
app:startDestination="@+id/navigation_a">
<fragment
android:id="@+id/navigation_a"
android:name="com.example.FragmentA"
android:label=""
tools:layout="@layout/fragment_a">
<action
android:id="@+id/action_navigation_a_to_navigation_a1"
app:destination="@id/navigation_a1"
app:launchSingleTop="true" />
</fragment>
<fragment
android:id="@+id/navigation_a1"
android:name="com.example.FragmentA1"
android:label=""
tools:layout="@layout/fragment_a1" />
<fragment
android:id="@+id/navigation_b"
android:name="com.example.FragmentB"
android:label=""
tools:layout="@layout/fragment_b" />
<fragment
android:id="@+id/navigation_c"
android:name="com.example.FragmentC"
android:label=""
tools:layout="@layout/fragment_c" />
<fragment
android:id="@+id/navigation_d"
android:name="com.example.FragmentD"
android:label=""
tools:layout="@layout/fragment_d" …Run Code Online (Sandbox Code Playgroud) android android-fragments android-architecture-components android-jetpack-navigation
我想让我的应用程序为即时应用做好准备.我创建了一个app模块,基本模块和一个功能模块.如果我在这个配置中运行我的项目一切都很好.
当我在我的基本模块Gradle文件中实现以下行.
annotationProcessor "android.arch.lifecycle:compiler:1.0.0"
api "android.arch.lifecycle:extensions:1.0.0"
Run Code Online (Sandbox Code Playgroud)
Gradle构建成功但我丢失了默认活动,无法运行项目.默认活动位于我的基本模块清单中.
如果我用实现更改扩展行.
implementation "android.arch.lifecycle:extensions:1.0.0"
Run Code Online (Sandbox Code Playgroud)
发生以下错误:
错误:任务':app:preDebugBuild'的执行失败.
Android依赖项'android.arch.lifecycle:runtime'具有不同版本的编译(1.0.0)和运行时(1.0.3)类路径.您应该通过DependencyResolution手动设置相同的版本
有谁知道问题是什么?
android module android-gradle-plugin android-instant-apps android-architecture-components
目前,我正在研究Android应用架构,我无法理解Github Repo Sample中的一件事。我们可以决定使用速率限制器或null检查来获取新数据,但是在这种情况下,我们只是将新值插入数据库中,而不会从数据库中删除旧值。例如,如果数据库中的旧结果之一从服务器中删除(用户删除的存储库)?它将仍在数据库中吗?我们如何消除这些价值?我是否缺少某些东西,或者这是未处理的案件?
我无法编译以下内容gradle:
compile 'android.arch.persistence.room:runtime: 1.0.0-alpha1'
Run Code Online (Sandbox Code Playgroud)
错误信息 :-
Error:(26, 13) Failed to resolve: android.arch.persistence.room:runtime: 1.0.0-alpha1
Run Code Online (Sandbox Code Playgroud)
以文件显示以项目结构显示 dialog
如果有人可以帮忙在这里帮助我,那将是有帮助的!
android android-gradle-plugin android-architecture-lifecycle android-architecture-components
我正在运行androidTest检测测试,我有一个方法,使用Room从DAO对象返回LiveData.
我正在调用这样的方法:
val animal = roomDatabase.animalsDao().getAnimal(1)
animal.observeForever(mMockObserver)
assertNotNull(animal.value)
Run Code Online (Sandbox Code Playgroud)
我用Mockito嘲笑观察者:
@Mock
private lateinit var mMockObserver = Observer<Animal>
Run Code Online (Sandbox Code Playgroud)
这应该返回包含动物ID为1的LiveData实例,但它为null.我的理解是,为了让LiveData返回任何东西,必须有一个观察者.我错误地设置了吗?
注意:如果我在DAO中更改getAnimal()的签名以直接返回Animal,而不是LiveData,那么它可以工作,所以我知道它与LiveData有关.
android kotlin android-room android-livedata android-architecture-components
在添加导航目录时显示错误无效的资源目录.
处理命令'〜/ Android/Sdk/builds-tools/27.0.3/aapt'以退出值1结束.
的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.crushcoder.testapp"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'android.arch.lifecycle:extensions:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
Run Code Online (Sandbox Code Playgroud)
我在目录res/navigation/nav_graph.xml下创建了导航文件
android android-navigation android-architecture-components android-architecture-navigation
可能重复此
我正在用dagger2探索android注射api.所以,在我的示例应用程序中,我ViewModel直接注入了活动; 看看下面的代码片段.
class SampleApp : Application(), HasActivityInjector {
@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>
override fun activityInjector(): AndroidInjector<Activity> =
dispatchingAndroidInjector
override fun onCreate() {
super.onCreate()
DaggerApplicationComponent.builder()
.application(this)
.build()
.inject(this)
}
}
Run Code Online (Sandbox Code Playgroud)
@Component(modules = [
AndroidInjectionModule::class,
ActivityBindingModule::class,
AppModule::class
/** Other modules **/
])
@Singleton
interface ApplicationComponent {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): ApplicationComponent
}
fun inject(sampleApp: SampleApp)
}
Run Code Online (Sandbox Code Playgroud)
@Module
public abstract class ActivityBindingModule {
@ContributesAndroidInjector(modules = MainModule.class)
public abstract MainActivity contributeMainActivityInjector();
} …Run Code Online (Sandbox Code Playgroud) android kotlin dagger-2 android-mvvm android-architecture-components
LiveData/ ViewModel是复杂的很好的替代品Loader。
AsyncTask是的成员LiveData。
public class JsonLiveData extends LiveData<List<String>> {
public JsonLiveData(Context context) {
loadData();
}
private void loadData() {
new AsyncTask<Void,Void,List<String>>() {
}.execute();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,根据Lyla Fujiwara的演讲:
我应该成为班级AsyncTask成员Repository吗?
android android-livedata android-architecture-components android-jetpack
我是android体系结构组件的新手,我对它一点也不困惑viewmodel。我正在构建一个从服务器获取项目列表并在布局中显示为列表的应用程序。我已经在Repository课堂上实现了网络通话。
Repository.java:
//Get list of top rated movies
public LiveData<NetworkResponse> getTopRatedMovies() {
final MutableLiveData<NetworkResponse> result = new MutableLiveData<>();
ApiService api = retrofit.create(ApiService.class);
Call<MovieData> call = api.getTopRateMovies("api_key");
call.enqueue(new Callback<MovieData>() {
@Override
public void onResponse(Call<MovieData> call, Response<MovieData> response) {
result.postValue(new NetworkResponse(response.body()));
}
@Override
public void onFailure(Call<MovieData> call, Throwable t) {
Log.e(TAG, t.getLocalizedMessage());
result.postValue(new NetworkResponse(t));
}
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
现在在ViewModel课堂上我正在这样做:
public class MovieListViewModel extends ViewModel {
public LiveData<NetworkResponse> result, topRatedMovies;
public LiveData<List<MovieEntity>> favoriteMovies;
private Repository repository; …Run Code Online (Sandbox Code Playgroud) android android-livedata android-viewmodel android-architecture-components android-jetpack
我们的团队正在利用Android Jetpack开发一个项目。
有演示代码显示了我们面临的问题。这些代码可以在https://github.com/viseator/TestRoomLivedata中找到
我创建一个UserDao:
@Dao
interface UserDao {
@Query("SELECT * FROM user WHERE uid = :uid LIMIT 1")
fun findUserById(uid: String?): Single<User>
@Query("SELECT * FROM user WHERE state = 1 LIMIT 1")
fun findLoginUserWithObserve(): LiveData<User>
@Query("SELECT * FROM user WHERE state =1 LIMIT 1")
fun findLoginUser(): Single<User>
@Update
fun update(vararg user: User)
}
Run Code Online (Sandbox Code Playgroud)
我还创建了一个kotlin对象来管理用户状态。
我正在观察返回的实时数据,findLoginUserWithObserve()以便在登录用户更改时得到通知:
object AccountManager {
private const val DATA_BASE_NAME = "users"
val TAG = "AccountManager"
fun init(context: Application) {
sDb = …Run Code Online (Sandbox Code Playgroud) android android-room android-architecture-components android-jetpack
android ×10
android-architecture-components ×10
android-room ×3
kotlin ×2
android-architecture-lifecycle ×1
android-architecture-navigation ×1
android-mvvm ×1
dagger-2 ×1
module ×1