小编Tar*_*ury的帖子

如何使用相同的RecyclerView适配器用于不同的布局

我正在开发一个很大程度上依赖于RecyclerView使用的应用程序.

我真的需要知道如何使用相同的RecyclerView来实现不同的项目布局.布局的一个例子是:

1)具有名称和描述的列表项

2)带有图像和名称的列表项

您可以看到它们相似,但布局略有变化.

提前致谢!

android android-recyclerview

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

如何迭代 RecyclerView 项目

在我的应用程序中,我有一个 RecyclerView,其中包含一个简单的项目视图,每行包含一个 TextView 和一个 Spinner。

用户从操作栏中单击“保存”后,我需要遍历所有项目并获取 Spinner 选定值。

任何想法如何或应该如何实现?

更新:

我已经设法使用以下循环进行迭代,但是对于每一行调用 findViewById() 是否是一个很好的解决方案,因为它是一个重要的调用性能的函数?

for (int i = 0; i < rvAttendanceItems.getChildCount(); i++) {
    Spinner spinner = (Spinner) rvAttendanceItems.findViewHolderForAdapterPosition(i).itemView.findViewById(R.id.attendance_list_status);
    spinner.getSelectedItemId();
}
Run Code Online (Sandbox Code Playgroud)

我的完整 RecyclerView 代码:

public class AttendanceAdapter extends RecyclerView.Adapter<AttendanceAdapter.AttendanceViewHolder> {

    private List<Student> studentItems;
    private Fragment frag;
    ArrayList<Status> statuses = new ArrayList<>();

    public AttendanceAdapter(List<Student> studentItems, Fragment frag) {
        this.studentItems = studentItems;
        this.frag = frag;

        DbHelper db = DbHelper.getInstance(frag.getContext());
        Cursor c = db.getStatuses("attendance");

        if (c != null) {
            while (c.moveToNext()) {
                Status tempStatus …
Run Code Online (Sandbox Code Playgroud)

android-recyclerview

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

为聊天应用程序构建NoSQL数据库(使用FireBase)

来自多年使用关系数据库,我正在尝试使用FireBase开发一个非常基本的聊天/消息应用程序

FireBase使用JSON格式字符串的NoSQL数据结构方法.

我做了很多研究,以便了解如何在考虑性能的情况下构建数据库.我试图"反规范化"结构并最终得到以下结果:

{

"chats" : {

    "1" : {
        "10" : {
            "conversationId" : "x123332"
         },
        "17": {
            "conversationId" : "x124442"
        }
    }
},

"conversations" : {

    "x123332" : {

      "message1" : {

        "time" : 12344556,
        "text" : "hello, how are you?",
        "userId" : 10
      },
      "message2" : {

        "time" : 12344560,
        "text" : "Good",
        "userId" : 1
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

数字1,10,17是示例用户ID.

我的问题是,这可以用更好的方式构建吗?目标是随着应用程序用户的增长而扩展,并且仍然可以获得最佳性能.

nosql firebase firebase-realtime-database

7
推荐指数
2
解决办法
7931
查看次数

ViewModel如何在配置更改时保留

查看ViewModel文档,它说:

换句话说,这意味着如果ViewModel的所有者因配置更改(例如旋转)而被销毁,则不会销毁它.所有者的新实例将重新连接到现有的ViewModel.

如果引用它的活动被销毁,ViewModel如何不被破坏?一旦我们创建一个新活动,它是如何重新连接的?

java android android-viewmodel android-architecture-components

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

使用VectorDrawable(新的Support 23.2.0库)导致Android Studio错误

使用新的支持库23.2添加VectorDrawable作为我的ImageView的src时

app:srcCompat="@drawable/ic_like"
Run Code Online (Sandbox Code Playgroud)

我得到应用程序成功编译和矢量drawable正确显示.但是,Android工作室向我显示错误说:

为标记ImageView找到了意外的名称空间前缀"app"

有关如何解决它的任何建议?或者它只是一个错误,应该被忽略?

编辑:

忘记提到我已经添加了xmlns:app ="http://schemas.android.com/apk/res-auto"声明

android android-support-library

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

Android 可组合相对于父级的相对位置 (X,Y)

我创建了一个Canvas可组合项,它允许我在父项( )的边界内拖动和缩放子可组合项Canvas

Canvas我需要知道在拖动或缩放时,子可组合项在任何给定时间相对于其父项( )的位置是什么。

GridCanvas(
    ratio = canvasRatio,
) { gridWidth, gridHeight ->

    var scale by remember { mutableStateOf(1f) }
    var offsetX by remember { mutableStateOf(0f) }
    var offsetY by remember { mutableStateOf(0f) }

    RenderedImage(
        modifier = Modifier
            .pointerInput(Unit) {
                detectTransformGestures { _, pan, zoom, _ ->
                    val futureScale = scale * zoom

                    if (futureScale in MIN_SCALE_FACTOR..MAX_SCALE_FACTOR) {
                        scale = futureScale
                    }

                    offsetX += pan.x
                    offsetY += pan.y
                }
            }
            .graphicsLayer {
                this.scaleX = scale …
Run Code Online (Sandbox Code Playgroud)

android-jetpack-compose

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

NavigationView将所选项目设置为已选中

我正在使用支持库中的NavigationView.我有一个活动A和B扩展的BaseActivity.

默认情况下,应用程序以活动A开始.当用户单击抽屉菜单项时,我开始活动B.

启动活动B.如何设置与其对应的菜单项突出显示为已选中?

提前致谢

更新:

现在,通过支持库的最新更新,您可以执行以下操作:

mDrawer.setCheckedItem(R.id.drawer_profile);
Run Code Online (Sandbox Code Playgroud)

android navigation-drawer navigationview

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

了解Android的VectorDrawable属性

我需要帮助来了解XML定义的VectorDrawable的某些属性。

当我使用Android Studio导入新的矢量资产时,它会生成类似以下内容的内容:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">

    <path 
        android:fillColor="#000000"
        android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z" />
</vector>
Run Code Online (Sandbox Code Playgroud)

默认情况下,宽度,高度,viewportHeight和viewportWidth被设置为某些默认的Material设计值。

由于我们处理的是矢量而不是像素图像。我的问题是:

  • 为什么需要设置尺寸(宽度,高度等)?
  • 如果我需要对多个尺寸使用相同的矢量xml,那么如何在不创建多个矢量xml的情况下覆盖此24dp值,这当然会破坏整个目的!

android android-vectordrawable

5
推荐指数
2
解决办法
1289
查看次数

DialogFragment显示带分页的图标列表

在我的应用中,用户可以向其他用户发送图标/礼物.我想显示一个DialogFragment弹出窗口,其中包括可用图标的分页.

例如,我总共要显示15个图标.我想在每页显示6个图标,这意味着我应该有3个"页面"来水平滑动.

类似的寻呼机

我尝试使用FragmentPagerAdapter和RecyclerView与GridLayout作为图标.但它并没有真正像我想要的那样工作.

如何使用没有任何片段的PagerAdapter实现这一点?

android android-pageradapter

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

Android LiveData 值未从后台调度

阅读此处LiveData找到的文档,我遇到了这一部分:

如果生命周期变为非活动状态,它将在再次变为活动状态时接收最新数据。例如,位于后台的 Activity 在返回前台后立即接收最新数据。

当我创建一个空白项目来测试它时,我发现来自后台的最新数据不会被发送。

示例代码来自onCreate()

viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

button.setOnClickListener {
    viewModel.buttonClicked()
}

viewModel.textLiveData.observe(this, Observer {
    textview.text = it
    Log.d("TEST", "new data = $it")
})
Run Code Online (Sandbox Code Playgroud)

当进入后台并返回时,是否应该将其LiveData持有的最新数据再次发送给观察者?

更新:

根据要求的 ViewModel 代码:

class MyViewModel : ViewModel() {

    val textLiveData = MutableLiveData<String>()

    fun buttonClicked() {
        textLiveData.value = "new text value"
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-livedata

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