小编Mal*_*lal的帖子

NavigationUI 无法与底部导航视图实现一起正常工作

所以我有一个场景,其中我有 5 个带有底部导航的片段。

1. 主页 2. 收件箱 3. 搜索 4. 通知 5. 个人资料

因此,我有另一个名为 (BarcodeDetail) 的片段,我从 Home Fragment 导航到该片段。

(首页 -> 条码详情)

现在从 BarcodeDetail 导航到 Search Fragment

(条码详细信息 -> 搜索)

但现在如果我从 BottomNavigationView 选择 Home Fragment 它不会转到 Home Fragment。

它不会选择与搜索片段相同的当前片段。

(日志打印Search Fragment的名称)

navController.addOnDestinationChangedListener((controller, destination, bundle) -> {

            Timber.d("Destination -> %s", destination.getDisplayName());
});

Run Code Online (Sandbox Code Playgroud)
private void setupBottomNavigation() {

        NavHostFragment navHostFragment = (NavHostFragment)
                getSupportFragmentManager().findFragmentById
                        (R.id.fragment_container_view);

        if (navHostFragment != null) {

            navController = navHostFragment
                    .getNavController();

            NavigationUI.setupWithNavController(
                    binding.bottomNavigation, navController);

            initDestinationListener();

        }
    }
Run Code Online (Sandbox Code Playgroud)

<?xml version="1.0" encoding="utf-8"?>
<menu …
Run Code Online (Sandbox Code Playgroud)

navigation android bottomnavigationview

18
推荐指数
3
解决办法
7055
查看次数

使用 Android 29 以下的 Camera X ImageCapture.OutputFileOptions.Builder 将图像保存到特定文件夹

我正在尝试实现 Camera X 应用程序。我现在面临的问题是我无法弄清楚如何使用以下命令将下面的图像保存到特定文件夹ImageCapture.OutputFileOptions.Builder

我当前的代码如下。我需要采用其他方式吗?或者我也可以这样做?


    private void capturePhoto() {

        showProgress(true);

        long currentTime = System.currentTimeMillis();

        ContentValues contentValues = new ContentValues();

        contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");

        contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, makeImageName(currentTime));

        if (Build.VERSION.SDK_INT >= 29) {

            contentValues.put(MediaStore.Images.Media.DATE_TAKEN, currentTime);

            contentValues.put(MediaStore.Images.Media.RELATIVE_PATH,
                    Environment.DIRECTORY_PICTURES + "/" + FOLDER_IMAGES);


        } else {

            // Todo ( Something equivalent to RELATIVE_PATH)

        }

        ImageCapture.OutputFileOptions options = new ImageCapture.OutputFileOptions.Builder(
                getContentResolver(), MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues).build();


        imageCapture.takePicture(options,
                ContextCompat.getMainExecutor(this),
                new ImageCapture.OnImageSavedCallback() {

                    @Override
                    public void onImageSaved(@NonNull ImageCapture.OutputFileResults results) {

                        ToastUtility.successToast(getApplicationContext(),
                                "Photo Capture Successfully");

                        showProgress(false);

                    }

                    @Override
                    public void onError(@NonNull ImageCaptureException exception) …
Run Code Online (Sandbox Code Playgroud)

java android android-camerax

5
推荐指数
0
解决办法
2551
查看次数

Jetpack Compose 使用 SavedStateHandle 发送返回结果不适用于 ViewModel 中注入的 SavedStateHandle

使用 SavedStateHandle 发送回结果不适用于 ViewModel 中注入的 SavedStateHandle。

使用navController.currentBackStackEntry?.savedStateHandle?它可以得到结果!

fun CreatePostScreen(
    navController: NavController,
    coroutineScope: CoroutineScope,
    snackbarState: SnackbarHostState,
    viewModel: CreatePostViewModel = hiltViewModel(),
) {

    LaunchedEffect(key1 = Unit) {

        navController.currentBackStackEntry?.savedStateHandle?.getStateFlow(
            "result", ""
        )?.collect { result ->
            Timber.d("Result -> $result")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在 ViewModel 中使用saveStateHandleHilt 注入不会得到结果!

@HiltViewModel
class CreatePostViewModel @Inject constructor(
    private val savedStateHandle: SavedStateHandle,
) : ViewModel() {
    
    init {

        viewModelScope.launch {
            savedStateHandle.getStateFlow("result", "").collect {
                Timber.d("Result -> $it")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我将结果发送回前一屏幕的方式!

navController.previousBackStackEntry?.savedStateHandle?.set("result", "this is result")
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-navigation android-jetpack-compose viewmodel-savedstate dagger-hilt

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