我有 2 个Activity可视化
ActivityActivity该列表Activity显示项目列表,并Activity在单击列表中的项目时显示详细信息。在ListActivity我们观察从数据库获取提要后,我们会更新 UI。
列表页面
feedViewModel.getFeeds().observe(this, Observer { feeds ->
feeds?.apply {
feedAdapter.swap(feeds)
feedAdapter.notifyDataSetChanged()
}
})
Run Code Online (Sandbox Code Playgroud)
现在我们有一个DetailActivity更新提要(项目)并Activity完成的页面,但更改未反映在ListActivity.
详情页面
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
feedViewModel.setFeedId(id)
feedViewModel.updateFeed()
}
Run Code Online (Sandbox Code Playgroud)
饲料视图模型
class FeedViewModel(application: Application) : AndroidViewModel(application) {
private val feedRepository = FeedRepository(FeedService.create(getToken(getApplication())),
DatabaseCreator(application).database.feedDao())
/**
* Holds the id of the feed
*/
private val feedId: MutableLiveData<Long> = MutableLiveData()
/**
* Complete list of feeds …Run Code Online (Sandbox Code Playgroud) android android-room android-livedata android-architecture-components
我一直被告知使用 Singleton 是不好的。但是,Android Room 实现的每个示例似乎都使用单例方法。有人可以解释为什么会这样吗?
谢谢
android design-patterns android-room android-livedata android-architecture-components
我有两个集合:用户和书籍。无论用户或书籍是否更新,我都需要获取它们的结果,然后将结果合并到 LinkedHashMap 中以用作 listView 菜单。
我认为 MediatorLiveData 将是可行的方法,但是如果我将用户查询和书籍查询放入,那么我会从两个 LiveData 对象之一中获取空值,因为只有一个或另一个触发。我想也许如果其中一个触发,那么也许我在 MediatorLiveData 的每个 addSource() 中运行了一个查询,但我不确定这是否可行。
我的关于 MediatorLiveData 的帖子在这里: 使用 MediatorLiveData 合并到 LiveData (Firestore) QuerySnapshot 流正在产生奇怪的结果
我的两个查询和 LiveData 对象如下:
//getUsers query using FirebaseQueryLiveData class
private Query getUsersQuery() {
FirebaseAuth mAuth = FirebaseAuth.getInstance();
adminID = mAuth.getUid();
query = FirebaseFirestore.getInstance().collection("admins")
.document(adminID)
.collection("users")
return query;
}
private FirebaseQueryLiveData usersLiveData = new FirebaseQueryLiveData(getUsersQuery());
//getBooks query using FirebaseQueryLiveData class
private Query getBooksQuery () {
FirebaseGroupID firebaseGroupID = new FirebaseGroupID(getApplication());
groupID = firebaseGroupID.getGroupID();
query = FirebaseFirestore.getInstance().collection("books")
.whereEqualTo("groupID", groupID) …Run Code Online (Sandbox Code Playgroud) android firebase android-livedata android-architecture-components google-cloud-firestore
我使用Google导航创建了全局操作.编译代码时出现以下错误
<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"
app:startDestination="@id/homeEnumerationFragment">
<fragment
android:id="@+id/homeEnumerationFragment"
android:name="org.southasia.ghru.ui.homeenumeration.HomeEnumerationFragment"
android:label="HomeEnumerationFragment"
tools:layout="@layout/home_enumeration_fragment"></fragment>
<fragment
android:id="@+id/stationFragments"
android:name="org.southasia.ghru.ui.station.StationFragment"
android:label="StationFragment"
tools:layout="@layout/station_fragment"/>
<fragment
android:id="@+id/devicesFragment"
android:name="org.southasia.ghru.ui.devices.DevicesFragment"
android:label="DevicesFragment"
tools:layout="@layout/devices_fragment"/>
<action android:id="@+id/action_global_stationFragments3" app:destination="@+id/stationFragments"/>
Run Code Online (Sandbox Code Playgroud)
错误错误:带参数或操作的目标必须具有"name"或"id"属性.
我正在尝试从 Android 架构组件实现Nagivation。我能够在我的片段中成功导航。我试图将它附加到我的底部导航,但我无法正确使用它。我可以成功地在片段之间导航,Navigation.findNavController(View).navigate(R.id.Fragment)但是当我使用任何 UI 组件或后退按钮执行此操作时,底部导航中的突出显示不会更改,如下面的 gif 所示
我的代码如下MainActivity.kt,
class MainActivity : AppCompatActivity() {
private lateinit var navController: NavController
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_home -> {
navController.navigate(R.id.homeFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_dashboard -> {
navController.navigate(R.id.addEmotionFragment)
return@OnNavigationItemSelectedListener true
}
R.id.navigation_notifications -> {
return@OnNavigationItemSelectedListener true
}
}
false
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = Navigation.findNavController(this, R.id.nav_host)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
}
}
Run Code Online (Sandbox Code Playgroud)
为了 HomeFragment.kt
class HomeFragment : Fragment() {
override …Run Code Online (Sandbox Code Playgroud) android bottomnavigationview android-architecture-components android-jetpack android-architecture-navigation
我在查询中使用 LIKE 运算符
@Query("SELECT * FROM item where barcodes LIKE :barcode")
List<Item> getItemWithBarcode(String barcode);
Run Code Online (Sandbox Code Playgroud)
有什么办法可以appendedTxt在条形码上附加一些东西()吗?像这样
@Query("SELECT * FROM item where barcodes LIKE (:barcode + 'appendedTxt')")
List<Item> getItemWithBarcode(String barcode);
Run Code Online (Sandbox Code Playgroud) 我目前正在根据官方文档和谷歌提供的示例应用程序(向日葵和 todo-app)将架构组件集成到我的应用程序中。我意识到这些都没有使用ViewModel接口(向日葵应用程序甚至不使用存储库接口)。
我的问题是:省略ViewModels的接口是否合理(包括优点和缺点)?
android design-patterns interface android-viewmodel android-architecture-components
我正在尝试使用导航控制器。我有一个底部导航视图。位于我的 MainActivity 上,它是使用以下代码启动的:
class MainActivity : AppCompatActivity() {
lateinit var navController : NavController
lateinit var logoHeaderImageView : ImageView
var toolbarMenu : Menu? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
logoHeaderImageView = findViewById(R.id.header_lakuin_image_view)
navController = Navigation.findNavController(this,R.id.nav_main_host_fragment)
setupBottomNavMenu(navController)
setupActionBar(navController)
}
fun setupBottomNavMenu(navController: NavController) {
NavigationUI.setupWithNavController(bottom_navigation_view,navController)
}
fun setupActionBar(navController: NavController) {
setSupportActionBar(main_activity_toolbar)
main_activity_toolbar.title = ""
val appBarConfiguration = AppBarConfiguration(
setOf(
// set some destination as the top hierarchy destination, to make the up button doesn't show.
R.id.destination_home,
R.id.destination_order,
R.id.destination_favourite,
R.id.destination_cart,
R.id.destination_profile …Run Code Online (Sandbox Code Playgroud) android android-navigation android-architecture-components android-jetpack android-architecture-navigation
我是使用 Android 导航控制器的新手。
这是我的主要活动的 xml:
<androidx.constraintlayout.widget.ConstraintLayout
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=".Activities.MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/main_activity_toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:elevation="4dp" app:layout_constraintHorizontal_bias="0.0">
</androidx.appcompat.widget.Toolbar>
<fragment
android:id="@+id/nav_main_host_fragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintTop_toBottomOf="@+id/main_activity_toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_graph"
app:defaultNavHost="true"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
我的 kotlin 主要活动:
class MainActivity : AppCompatActivity(),NavController.OnDestinationChangedListener {
lateinit var navController : NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = Navigation.findNavController(this,R.id.nav_main_host_fragment)
navController.addOnDestinationChangedListener(this)
setupActionBar()
}
override fun onDestinationChanged(
controller: NavController,
destination: NavDestination,
arguments: Bundle?) {
}
private fun setupActionBar() {
setSupportActionBar(main_activity_toolbar)
supportActionBar?.title …Run Code Online (Sandbox Code Playgroud) android android-navigation android-architecture-components android-jetpack android-architecture-navigation
我ArchitectureComponents在我的应用程序中使用。我正在使用 ActivityMain 中的 ViewModel发出API请求ViewModel并将数据设置为RecyclerView使用 ViewModel。为了进行 Api 调用,我需要一个Token保存在SharedPreference.I 中的令牌。我需要获取该令牌并将其添加到标题中,同时发出请求。哪里以及如何获取 SharedPreference 值。它应该在 ViewModel 或 Repository 中。
这是我的代码ViewModel
public class FoodieViewModel extends AndroidViewModel {
FoodieRepository repository;
MutableLiveData<ArrayList<Foodie>> foodieList;
public FoodieViewModel(@NonNull Application application) {
super(application);
repository=new FoodieRepository(application);
}
LiveData<ArrayList<Foodie>> getAllFoodie(){
if(foodieList==null){
foodieList=new MutableLiveData<ArrayList<Foodie>>();
loadFoodies();
}
return foodieList;
}
public void loadFoodies(){
String url="somethimg.com";
JsonArrayRequest request =new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
ArrayList<Foodie> list=new ArrayList<>(); …Run Code Online (Sandbox Code Playgroud) android sharedpreferences android-recyclerview android-architecture-components
android ×10
android-architecture-components ×10
android-architecture-navigation ×3
android-room ×3
firebase ×1
interface ×1