小编Ser*_*kii的帖子

未解决的参考:asLiveData 同时将 Flow 转换为 LiveData

我有以下情况:

这是我的存储库类:

import com.mikhailovskii.timesapp.util.Result
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.flow

class LoginRepository {

    fun fetchUser() = flow {
        emit(Result.Loading)
        delay(1000)
        emit(Result.Success((0..20).random()))
    }

}
Run Code Online (Sandbox Code Playgroud)

有 ViewModel 类:

import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import com.mikhailovskii.timesapp.util.Result

class LoginViewModel() : ViewModel() {

    private val loginRepository = LoginRepository()

    private val a = loginRepository.fetchUser()


    val user: LiveData<Result<Int>> get() = loginRepository.fetchUser().asLiveData()

}
Run Code Online (Sandbox Code Playgroud)

还有 Result 类:

sealed class Result<out R> {

    data class Success<out T>(val data: T) : Result<T>()

    object Loading : Result<Nothing>()

    object Error : Result<Nothing>()

}
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试在asLiveData方法的帮助下将 …

android mvvm kotlin

20
推荐指数
2
解决办法
7366
查看次数

无法使 ExposeDropdownMenu 与 OutlinedTextField 宽度相同

我遇到以下问题 - 下拉菜单项的宽度与 OutlinedTextField 的宽度不同

寻找解决方案 - 发现以下内容:

  1. 添加变量以保持textField宽度:

    var textFieldSize by remember { mutableStateOf(Size.Zero) }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将值设置onGloballyPositionedTextField

    onGloballyPositioned { coordinates ->
        textFieldSize = coordinates.size.toSize()
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 读取其中的值ExposedDropdownMenu

    ExposedDropdownMenu(
        expanded = expanded,
        onDismissRequest = { expanded = false },
        modifier = Modifier
            .background(Color.White)
            .width(with(LocalDensity.current) { textFieldSize.width.toDp() })
    )
    
    Run Code Online (Sandbox Code Playgroud)

问题是它可以很好地与 一起工作DropdownMenu,但不能与 一起工作ExposedDropdownMenu。有什么问题?

这是完整的代码:

var expanded by remember { mutableStateOf(false) }
val genderList by remember { mutableStateOf(listOf("Male", "Female")) }
var textFieldSize by remember { …
Run Code Online (Sandbox Code Playgroud)

kotlin android-jetpack-compose

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

“adb”无法打开,因为 Apple 无法检查它是否存在恶意软件

我遇到了以下问题:当我尝试像教程中那样制作 RN 项目时,我有下一个窗口:“adb” can’t be opened because Apple cannot check it for malicious software.

是的,我知道当我有这样的窗口时,我应该在finder中打开应用程序,单击鼠标右键,然后单击“打开”。
但是在这种情况下我不能这样做,因为adb在finder中无法打开,那么我该如何解决这个问题呢?

macos android

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

Android Studio在Mac Catalina Beta上意外退出

我安装了最新版本的Mac OS(Catalina Beta 10.15),并遇到以下问题:当我打开Android studio并开始编写代码时,studio退出了此类崩溃报告。您能帮我解决这个问题吗,因为它实际上无法正常工作。我认为重新安装可以提供帮助,但是也许还有其他解决方案?

*Message in a code style, because pastebin links require that *
Run Code Online (Sandbox Code Playgroud)

macos android-studio macos-catalina

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

Flow 不更新可组合项

我遇到了以下问题:

这是注册屏幕,上面有几个输入字段。当用户输入内容时,该值会传递到 ViewModel,设置为屏幕状态并通过 StateFlow 传回屏幕。从可组合项中,我正在观察这个 StateFlow。问题是 Composable 在向 Flow 发出新值后并未失效。

这是视图模型代码:

class RegistrationViewModel : BaseViewModel() {

    private val screenData = CreateAccountRegistrationScreenData.init()

    private val _screenDataFlow = MutableStateFlow(screenData)
    internal val screenDataFlow = _screenDataFlow.asStateFlow()

    internal fun updateFirstName(name: String) {
        screenData.firstName = name
        updateScreenData()
    }

    private fun updateScreenData() {
        viewModelScope.launch {
            _screenDataFlow.emit(screenData.copy())
        }
        println()

    }

}
Run Code Online (Sandbox Code Playgroud)

这是可组合的代码:

@Composable
fun RegistrationScreen(navController: NavController, stepName: String) {
    val focusManager = LocalFocusManager.current

    val viewModel: RegistrationViewModel by rememberInstance()

    val screenData by viewModel.screenDataFlow.collectAsState()

    Scaffold {
        ConstraintLayout(
            modifier = Modifier
                .fillMaxSize() …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose kotlin-stateflow

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

如何从使用 diffutil 的 recyclerview 中删除项目?

我有以下 recyclerview 适配器:

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncListDiffer
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.add_new_card_list_item.view.*
import kotlinx.android.synthetic.main.bank_card_list_item.view.*
import kz.moneyman.R

class BankCardsAdapter(
        private val onDeleteCardClickListener: OnDeleteCardClickListener,
        private val onAddCardClickListener: OnAddCardClickListener
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    private var checkedItem = 0
    private val differ = AsyncListDiffer(this, BankCardsDiffUtilCallback())

    override fun getItemViewType(position: Int): Int {
        if (differ.currentList[position].isNotEmpty()) {
            return R.layout.bank_card_list_item
        }
        return R.layout.add_new_card_list_item
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(viewType, parent, false)

        return if (viewType == R.layout.bank_card_list_item) {
            BankCardViewHolder(itemView) …
Run Code Online (Sandbox Code Playgroud)

android

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

如何使用Redux从服务器获取数据?

我需要借助Redux之类的工具从服务器获取数据。我看了一些有关它的教程,并为此编写了一些代码。这里是:

actions / fetching_actions.js

import * as Actions from '../constants/action_types';

function fetchListOfCities() {
  return fetch(`${Actions.BASE_URL}/data/2.5/find?lat=55.5&lon=37.5&cnt=10&appid=8df903ce56f6d18245e72f380beb297d`);
}

export const listOfCitiesRequest = () => function (dispatch) {
  return fetchListOfCities()
    .then(list => list.json())
    .then((list) => {
      dispatch(getListOfCities(list));
    }).catch((error) => {
      console.log(error);
    });
};

export const getListOfCities = result => ({
  type: Actions.LIST_RESPONSE,
  result,
});
Run Code Online (Sandbox Code Playgroud)

常量/action_types.js

export const BASE_URL = 'http://api.openweathermap.org';

export const LIST_RESPONSE = 'LIST_RESPONSE';

export const CITY_RESPONSE = 'CITY_RESPONSE';
Run Code Online (Sandbox Code Playgroud)

reducers / fetching_reducer.js

import * as Actions from '../constants/action_types';

const initialState = { …
Run Code Online (Sandbox Code Playgroud)

reactjs redux

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

除了底部导航视图之外,如何使片段的布局具有屏幕高度的高度?

我面临以下问题:我需要制作一个片段,除了底部导航视图外,它的高度与屏幕的高度相同。这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".ui.main.MainActivity">

    <FrameLayout
        android:id="@+id/tabs_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#111111"
        app:layout_constraintBottom_toTopOf="@id/bottom_nav" />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/bottom_nav"
        android:layout_width="match_parent"
        android:layout_height="@dimen/bottom_nav_height"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/bottom_nav_menu" />


</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

我加android:background="#111111"了看看,fragment的真实高度是多少。可能我认为这app:layout_constraintBottom_toTopOf="@id/bottom_nav"可以帮助我,但不幸的是它没有解决我的问题。那么,我该如何处理呢?

xml android

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