タグ付けされた質問 「android-architecture-components」

10
AndroidXとは何ですか?
Androidのルームライブラリについて読んでいます。彼らはパッケージandroidをに変更したようandroidxです。私はそれを理解しませんでした。誰か説明してもらえますか? implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" これandroidもパッケージで利用可能です。 implementation "android.arch.persistence.room:runtime:$room_version" annotationProcessor "android.arch.persistence.room:compiler:$room_version" 新しいサポートライブラリをパッケージ化するandroidx代わりに何が必要でしたandroidか? ユースケースと既存のプロジェクトの要因に影響を与えます。



3
AndroidViewModelとViewModel
Androidアーキテクチャコンポーネントライブラリの導入に伴い、AndroidViewModelおよびを含むいくつかの新しいクラスが導入されましたViewModel。しかし、これら2つのクラスの違いを理解するのに苦労しています。ドキュメントは簡潔に説明しAndroidViewModel、次のように: アプリケーションコンテキスト対応 ViewModel 簡潔に感謝しますが、これは正確に何を意味していますか?いつ使用AndroidViewModelするViewModelか、その逆かを選択する必要があるのはいつですか?

21
ViewModelProvidersは1.1.0で廃止されました
のGoogleドキュメントを見ると、ViewModel以下のを取得する方法のサンプルコードが表示されていますViewModel。 val model = ViewModelProviders.of(this).get(MyViewModel::class.java) 最新の依存関係を使用する場合、そのandroid.arch.lifecycle:extensions:1.1.1ようなクラスはありませんViewModelProviders。 のドキュメントに移動するとViewModelProviders、次のようなコメントが表示されました。 このクラスはAPIレベル1.1.0で廃止されました。ViewModelProvider.AndroidViewModelFactoryを使用します 問題は、を使用しようとしたときに、のインスタンスを取得するViewModelProvider.AndroidViewModelFactoryための同等のofメソッドが見つからないことViewModelです。 私がやろうとしたこと: ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java) したがって、メソッドの名前は、create呼び出すたびにViewModelの新しいインスタンスを取得します。これは、私が求めているものではありません。 上記の廃止されたコードの置き換えは何ですか?

14
AppCompatActivityでシンボルViewModelProvidersを解決できません
ViewModelを機能させようとしていますが、今のところうまくいきません。Android Studioにエラーが表示されるCannot resolve symbol 'ViewModelProviders'。 このトピックに関して私が見つけた他のすべての質問はに修正extends Activityすることでしたextends AppCompatActivityが、私は正しいものを拡張しています。何が欠けているかわからない... コードはこのYouTubeビデオに基づいています MainActivity.java public class MainActivity extends AppCompatActivity implements TileAdapter.TileAdapterOnClickHandler { private BaseViewModel viewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //set Toolbar Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); //initialize viewModel viewModel = ViewModelProviders.of(this).get(BaseViewModel.class); BaseViewModel.java public class BaseViewModel extends ViewModel { private Movie[] …

12
Androidで別のフラグメントに移動した後にナビゲーションスタックをクリアする方法
Androidで新しいナビゲーションアーキテクチャコンポーネントを使用していますが、新しいフラグメントに移動した後、ナビゲーションスタックをクリアできません。 例:loginFragmentにいて、ホームフラグメントに移動したときにこのフラグメントをスタックからクリアして、ユーザーが[戻る]ボタンを押したときにloginFragmentに戻らないようにします。 シンプルなNavHostFragment.findNavController(Fragment).navigate(R.id.homeFragment)を使用してナビゲートしています。 現在のコード: mAuth.signInWithCredential(credential) .addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment); } else { Log.w(TAG, "signInWithCredential:failure", task.getException()); } } }); navigate()でNavOptionsを使用してみましたが、戻るボタンがまだloginFragmentに戻ってきます NavOptions.Builder navBuilder = new NavOptions.Builder(); NavOptions navOptions = navBuilder.setPopUpTo(R.id.homeFragment, false).build(); NavHostFragment.findNavController(LoginFragment.this).navigate(R.id.homeFragment, null, navOptions);

8
Android Room Persistence Library:Upsert
AndroidのRoom永続化ライブラリには、オブジェクトまたはコレクションに対して機能する@Insertおよび@Updateアノテーションが含まれています。ただし、データがデータベースに存在する場合と存在しない場合があるため、UPSERTを必要とするユースケース(モデルを含むプッシュ通知)があります。 Sqliteにはネイティブのアップサートはありません。回避策はこのSO質問で説明されています。そこでの解決策を考えると、どのようにそれらを部屋に適用するのでしょうか? より具体的には、外部キー制約を壊さないようにRoomに挿入または更新を実装するにはどうすればよいですか?onConflict = REPLACEでinsertを使用すると、その行への外部キーのonDeleteが呼び出されます。私の場合、onDeleteはカスケードを引き起こし、行を再挿入すると、外部キーを持つ他のテーブルの行が削除されます。これは意図された動作ではありません。

3
LiveDataの個別のMutableLiveDataサブクラスがあるのはなぜですか?
とメソッドを公開することだけMutableLiveDataが異なるように見えますが、それらは保護されています。LiveDatasetValue()postValue()LiveData この変更のために別のクラスを作成し、それらのメソッドLiveData自体を単にパブリックとして定義しない理由は何ですか? 一般的に言って、そのような形式の継承(特定のメソッドの可視性を高めることが唯一の変更である)はよく知られた方法であり、それが役立つ可能性のあるいくつかのシナリオは何ですか(すべてのコードにアクセスできると仮定)?

5
バックグラウンドサービスと更新UIからViewModelのLiveDataを更新する方法
最近、Googleによって最近導入されたAndroidアーキテクチャを調査しています。ドキュメントから私はこれを見つけました: public class MyViewModel extends ViewModel { private MutableLiveData<List<User>> users; public LiveData<List<User>> getUsers() { if (users == null) { users = new MutableLiveData<List<Users>>(); loadUsers(); } return users; } private void loadUsers() { // do async operation to fetch users } } アクティビティは次のようにこのリストにアクセスできます。 public class MyActivity extends AppCompatActivity { public void …

4
ViewModelからのLiveDataの観察
データフェッチ(具体的にはFirebase)を処理する別のクラスがあり、通常はそこからLiveDataオブジェクトを返し、非同期で更新します。返されたデータをViewModelに保存したいのですが、問題は、その値を取得するために、データフェッチクラスから返されたLiveDataオブジェクトを監視する必要があることです。監視メソッドには最初のパラメーターとしてLifecycleOwnerオブジェクトが必要でしたが、ViewModel内にそれがないことは明らかであり、ViewModel内のActivity / Fragmentへの参照を保持することになっていないことはわかっています。私は何をすべきか?

2
NavHostのビューとしての<androidx.fragment.app.FragmentContainerView>対<fragment>
androidx.fragment.app.FragmentContainerView通常のfragmentアプリの代わりにnavHostとして使用すると、向きを変更した後、目的地に移動できません。 次のエラーが発生します。 java.lang.IllegalStateException: no current navigation node 適切に使用するために知っておくべき落とし穴はありますか、またはナビゲーションコンポーネントの使用方法が正しくありませんか? ビューを持つ単純なアクティビティxml: ... &lt;androidx.fragment.app.FragmentContainerView android:id="@+id/nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:navGraph="@navigation/nav_simple" /&gt; ... ナビゲーションコード: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;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/nav_legislator.xml" app:startDestination="@id/initialFragment"&gt; &lt;fragment android:id="@+id/initialFragment" android:name="com.example.fragmenttag.InitialFragment" android:label="Initial Fragment" tools:layout="@layout/initial_fragment"&gt; &lt;action android:id="@+id/action_initialFragment_to_destinationFragment" app:destination="@id/destinationFragment" /&gt; &lt;/fragment&gt; &lt;fragment android:id="@+id/destinationFragment" android:name="com.example.fragmenttag.DestinationFragment" android:label="Destination Fragment" tools:layout="@layout/destination_fragment" /&gt; &lt;/navigation&gt; これは、バグを簡単に再現できるgithubリポジトリです:https …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.