小编Nom*_*sta的帖子

如何使用Navigation Architecture Component从片段中获取结果?

假设我们有两个片段:MainFragmentSelectionFragment.第二个是用于选择某个对象的构建,例如整数.从第二个片段接收结果有不同的方法,如回调,总线等.

现在,如果我们决定使用导航架构组件导航到第二个片段,我们可以使用以下代码:

NavHostFragment.findNavController(this).navigate(R.id.action_selection, bundle)
Run Code Online (Sandbox Code Playgroud)

其中bundleBundle(当然)的实例.正如您所看到的那样,无法访问SelectionFragment我们可以进行回调的位置.问题是,如何使用Navigation Architecture Component接收结果?

android android-architecture-components android-jetpack android-architecture-navigation

24
推荐指数
5
解决办法
6230
查看次数

如何创建和写入Excel文件(.xlsx)?

有些Java开发人员库有大量无法在Android上运行的方法.

我开始使用像OpenCSV这样的库,但遗憾的是Excel已经知道打开CSV文件的问题.

然后我试着用:

  • Apache POI - 它肯定有太多的方法.
  • JExcelAPI - 它可以工作,但仅适用于旧的二进制.xls文件.
  • docx4j - 太多的罐子,因为它基于JAXB,不包含在Android中.

我的问题是,如何在Android上创建.xlsx格式的简单Excel文件,而不超过65k方法?

java excel android

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

Circle上的setRadius在Google地图中提供了糟糕的用户体验

我正在尝试实现类似Google Maps样本和它们的东西CircleDemoActivity:

Android示例

问题是,圆圈正在消失并出现,我记录了这个问题

Google Maps Sample问题

在我看来,该部分应该工作:

if (marker.equals(radiusMarker)) {
    radius = toRadiusMeters(centerMarker.getPosition(), radiusMarker.getPosition());
    circle.setRadius(radius);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

问题在于setRadius方法,但也许是一些解决方法.

如何解决?

android google-maps

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

Android中的RecyclerView的ValueEventListener与ChildEventListener

Firebase数据库用户知道有两个用于监听数据的基本监听器:ValueEventListenerChildEventListener.当我们听一个对象时它很有用,但是当我们听一些收集时变得非常困难.

要指定问题,让我们假设我们有HackerNews提要,我们在Firebase中监听例如"posts"对象.

当然我们RecyclerView在我们的应用程序中显示帖子,我认为好主意是使用FirebaseUI,但问题是我们想要在更改服务器端或测试的情况下制作更抽象的应用程序.所以我们会使用一些适配器,但这是另一个问题.

正如我所提到的,我们有两个听众,问题哪个更好

当我们使用时,ValueEventListener我们将获得整个收集,但是如果有任何更改,例如一个用户更改了帖子的内容,我们将不得不重新加载整个数据,这意味着通过昂贵的网络传输发送更多字节.另一个问题是当我们使用multilisteners时,这里是示例:

Post有userId,但我们想显示他的名字,所以在onDataChanged方法中我们获取用户数据,如下所示:

postsReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot data : dataSnapshot.getChildren()) {
            Post post = data.getValue(Post.class);   
            usersReference.child(post.getUserId()).addListenerForSingleValueEvent(new ValueEventListener() {

                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    // Here we have user data
                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {

                }
            });
        }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {
    }
});
Run Code Online (Sandbox Code Playgroud)

你可以看到,现在我们必须分别添加每个帖子RecyclerView,这将给我们提供可能我们应该使用的线索ChildEventListener.

所以现在当我们使用``ChildEventListener时问题是一样的 - …

java android firebase firebase-realtime-database

16
推荐指数
3
解决办法
1万
查看次数

Android中的项目下的RecyclerView标题

我找不到这种行为的解决方案:

LinkedIn Pulse

这是RecyclerView的标题是项目下的一点点.当然我猜它是RecyclerView.

我怎样才能做到这一点?

编辑

我所做的只是为回收者视图添加装饰.

这是我的简单装饰:

public class HeaderItemDeceration extends RecyclerView.ItemDecoration {

    public HeaderItemDeceration() {
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        if (parent.getChildAdapterPosition(view) == 0) {
            outRect.bottom = -100;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它正在工作,但问题是这个标题消失得太快,我的意思是下一个项目位于顶部,并且在它下面有标题,并且立即消失,因为通常它应该在下一个项目位于顶部时隐藏.

编辑2

我没有解释所有内容,所以我在这里解释.

在我的情况下,我不想有ActionBar.我想要的只是在RecyclerView下的图像,如上例所示,但没有折叠工具栏.让我们说我的活动具有哪个父母的风格Theme.AppCompat.Light.NoActionBar.

考虑到我在下面的解释和答案,我试图通过这样的布局达到目标:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:scaleType="fitXY"
            android:src="@drawable/header"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view_items"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:behavior_overlapTop="24dp"/>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

它几乎正常工作.差不多,因为我注意到了不必要的效果,当我滚动到顶部有时我必须重复滚动手势才能到达顶部.我记录了它: …

android android-recyclerview

12
推荐指数
2
解决办法
2169
查看次数

在ViewHolder中绑定

这将是理论问题.

作为每个人,我们在应用程序的许多部分使用RecyclerView.有时,RecyclerView包含不同的项目,不仅包括图像,还包括广告,提示等.这就是为什么我们可以在Adapter中使用getViewType()方法.

但是当我们有很多viewTypes并且在Adapter中绑定它不优雅时会出现问题.所以这就是问题,在ViewHolder中绑定数据是不错的好模式?

假设我们有应用列表.

每个应用程序都有简洁的名称.我们的ViewHolder看起来像这样:

class AppViewHolder extends RecyclerView.ViewHolder {

     public TextView nameText;

     AppViewHolder(View itemView) {
          super(itemView)
          nameText = (TextView) itemView.findViewById(R.id.text_name);
     }
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以添加bind方法:

public void bind(App app) {
     nameText.setText(app.getName());
}
Run Code Online (Sandbox Code Playgroud)

这是好模式吗?

另一种解决方案是使用ViewModel.因为我们在RecyclerView中有不同的项目,所以我们的适配器可以包含类的列表,它是每个ViewModel的基类.

所以基础课是:

class RecyclerViewItem {}
Run Code Online (Sandbox Code Playgroud)

现在是ViewModel for App的类.

class AppRecyclerViewItem extends RecyclerViewItem {

     App app;

     ...
}
Run Code Online (Sandbox Code Playgroud)

和我们的适配器只有RecyclerViewItems列表:

class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    List<RecyclerViewItem> items;

    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,使用这种方法(我的意思是使用ViewModel),最好在ViewHolder或ViewModel中添加bind方法吗?

android android-viewholder android-recyclerview

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

AppCode不会提示RxSwift类和其他一些已安装的CocoaPods

我已经安装了CocoaPods的最新版本的RxSwift.

虽然尝试使用RxSwift的简单元素,NotificationsCenter.default.rx但它不会提示使用方法.有趣的是,有时它会提示其他pod,有时候不会提示其余的,所以我必须打开XCode来检查代码更正.

我该如何解决这个问题?

jetbrains-ide app-code ios appcode swift

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

使用 CameraX 启动和停止相机的正确方法是什么?

我已经开始探索 CameraX 库以及示例应用程序,并且注意到管理生命周期方面存在一些不一致之处。

在本主题中,我将仅讨论预览用例,因为它主要与生命周期相关。

在示例应用程序中, in CameraFragment,用例绑定到CameraXinonViewCreated并取消绑定 in onDestroyViewunbind第一个问题是,如果我们传递LifecycleOwner给方法,我们是否必须使用用例bind?我们可以将它们绑定起来onCreate并将生命周期管理留给 吗CameraX

我还尝试遵循入门教程,其中SurfaceTextureTextureView刚刚被替换。在示例应用程序中,TextureView首先从父级中删除,然后添加,然后SurfaceTexture替换。我们必须这样做吗?是什么原因?

另一件事是,在示例应用程序中,用例是从view.post { }方法绑定的。我在这种方法中遇到了很多问题,因为在将片段放在后台堆栈上、替换为另一个片段并重新创建之后,CameraX 记录了许多消息:

E/CamX: [ERROR][STATS_AEC] aec_led_calibration.cpp:560: aec_led_cal_apply_calibration Invalid pointer 0x7921174000 0x0
E/CamX: [ERROR][STATS_AEC] aec_set.cpp:1346: aec_set_fps_range Aec_Error invalid input 414  E/CamX: [ERROR][STATS_AEC] camxcaecstatsprocessor.cpp:1671 SetAlgoBayerHistValue() Unsupported bayer hist channel! 
E/CamX: [ERROR][STATS  ] camxcaecstatsprocessor.cpp:3194 ProcessRequestFastAE() [FastAE] Failed to apply gain to …
Run Code Online (Sandbox Code Playgroud)

android android-camerax

11
推荐指数
2
解决办法
1万
查看次数

firebase是否会自动设置apns-push-type标头?

根据iOS 13中针对APNS的更改,静默推送通知需要附加的标头(apns-push-type)。

我将Firebase用作后端和移动设备之间的中介,并且我想知道Firebase是否在content-available属性设置为true 时自动设置提到的标头。

它已经在发生在AWS,提到这里

我可以在iOS中以某种方式检查此标头是否传递给静默推送通知吗?

我已经在设备上进行了测试,将Firebase依赖关系更新到最新版本(即使在后台)后,一切都可以正常工作。但是我仍然没有任何证据证明标题是什么样子的。

apple-push-notifications ios firebase firebase-cloud-messaging

9
推荐指数
2
解决办法
822
查看次数

在 ImageCapture.Builder 上设置目标分辨率在某些华为设备上不起作用

假设我们只想拍摄具有目标1200x1600像素分辨率的肖像(而不是风景)照片。

根据setTargetResolution方法文档ImageCapture.Builder

分辨率应以用例的目标轮换来表示。例如,请求纵向图像的自然目标旋转中具有纵向自然方向的设备可以指定 480x640,而旋转 90 度并瞄准横向方向的同一设备可以指定 640x480。

我们应该构建ImageCapture这样的用例:

ImageCapture.Builder()
   .setTargetResolution(Size(1200, 1600))
   .build()
Run Code Online (Sandbox Code Playgroud)

假设我们的手机始终处于纵向自然方向。

一切正常,除了在某些华为手机(例如华为 Mate 20 Lite)上,图像被裁剪,因为我们会反转尺寸(即Size(1600,1200))。

我们可以使用任何“安全”的解决方法来解决这个问题吗?我不想像Signal 那样将华为设备列入黑名单。

CameraX版本1.0.0-beta03

编辑

1.0.0-beta06还是行不通。

android android-jetpack android-camerax

8
推荐指数
0
解决办法
1004
查看次数