我正在开发一个很大程度上依赖于RecyclerView使用的应用程序.
我真的需要知道如何使用相同的RecyclerView来实现不同的项目布局.布局的一个例子是:
1)具有名称和描述的列表项
2)带有图像和名称的列表项
您可以看到它们相似,但布局略有变化.
提前致谢!
在我的应用程序中,我有一个 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) 来自多年使用关系数据库,我正在尝试使用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.
我的问题是,这可以用更好的方式构建吗?目标是随着应用程序用户的增长而扩展,并且仍然可以获得最佳性能.
查看ViewModel文档,它说:
换句话说,这意味着如果ViewModel的所有者因配置更改(例如旋转)而被销毁,则不会销毁它.所有者的新实例将重新连接到现有的ViewModel.
如果引用它的活动被销毁,ViewModel如何不被破坏?一旦我们创建一个新活动,它是如何重新连接的?
java android android-viewmodel android-architecture-components
使用新的支持库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"声明
我创建了一个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) 我正在使用支持库中的NavigationView.我有一个活动A和B扩展的BaseActivity.
默认情况下,应用程序以活动A开始.当用户单击抽屉菜单项时,我开始活动B.
启动活动B.如何设置与其对应的菜单项突出显示为已选中?
提前致谢
更新:
现在,通过支持库的最新更新,您可以执行以下操作:
mDrawer.setCheckedItem(R.id.drawer_profile);
Run Code Online (Sandbox Code Playgroud) 我需要帮助来了解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设计值。
由于我们处理的是矢量而不是像素图像。我的问题是:
在我的应用中,用户可以向其他用户发送图标/礼物.我想显示一个DialogFragment弹出窗口,其中包括可用图标的分页.
例如,我总共要显示15个图标.我想在每页显示6个图标,这意味着我应该有3个"页面"来水平滑动.
我尝试使用FragmentPagerAdapter和RecyclerView与GridLayout作为图标.但它并没有真正像我想要的那样工作.
如何使用没有任何片段的PagerAdapter实现这一点?
阅读此处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)