ListView是UI库在大多数现代操作系统中提供的图形屏幕控件或窗口小部件,用于以列表形式显示项目。
SharePoint Online JSON 格式适用于编辑表单,但不适用于列表视图
我有一个 SharePoint Online 列表,前几天运行良好,并关联了一些条件 JSON。它根据另一个字段更改背景颜色。我可以看到背景颜色是
Carousel Slider 项目中的 Flutter 动态列表
我有来自服务器的动态列表图像,我想将它们推送到轮播滑块中。 但是当我将它们添加到项目中并运行时,出现此错误: 类“String”没有实例方法“m...
带有中心键和多个条子的CustomScrollView:向不同方向展开小部件
我正在构建一个应用程序,您可以在其中浏览各种产品。每个产品还有一个产品详细信息页面。在该产品详细信息页面上,我想显示产品图片、价格、产品描述...
如何将Android.database.sqlite表数据加载到spinner中? (表有数据但未加载)
我正在使用以下代码将 sqlite 数据库表信息加载到微调器中。我通过保存数据活动来保存表中的数据,并尝试快速获取保存的数据...
MAUI Group ListView 展开和折叠标题项处于隐藏状态时出现问题
展开和折叠标题项处于隐藏状态时的 Group ListView 问题 当 Listview 展开时,标题项将处于隐藏状态,只能看到空白空间 滚动时...
我正在使用一些功能制作一个 Kotlin 项目 代码的作用如下 - 从微调器中获取用户名 从单选按钮中获取预算标题 它导航到另一个
一个领域的初学者,我有这段代码可以工作,但是在单击的情况下出现错误 当我单击任何卡片时,所有卡片也会打开。我想打开一张只需点击的卡片 导入...
我对 ListView+images 有两个问题。 我从包含所有必要信息的 xml 文件中获取列表的值。 我需要设置一个列表视图。每行都应包含一个图标和一个山雀...
我正在使用一些功能制作一个 Kotlin 项目 代码的作用如下 - 从微调器中获取用户名 从单选按钮中获取预算标题 它导航到另一个
如何使用 Kotlin 的自定义适配器为列表视图设置OnItemClickListener
我在我的 Android 应用程序上使用列表视图的自定义适配器。我不知道如何设置项目点击的监听器。我的应用程序使用 Kotlin。 这是我的适配器布局。 我在我的 Android 应用程序上使用列表视图的自定义适配器。我不知道如何设置项目点击的监听器。我在我的应用程序中使用 Kotlin。 这是我的适配器布局。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <CheckBox android:id="@+id/cbx" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" /> <TextView android:id="@+id/txtNameNote" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:layout_toRightOf="@+id/cbx" /> <TextView android:id="@+id/txtPercent" android:layout_width="wrap_content" android:layout_height="match_parent" android:text="TextView" android:layout_toRightOf="@+id/cbx" android:layout_below="@+id/txtNameNote" /> </RelativeLayout> </LinearLayout> 这是我的适配器代码 class CustomAdapter(internal var context: Context, resource: Int, internal var listNote: ArrayList<Note>) : ArrayAdapter<Note>(context, resource, listNote) { override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { var convertView = convertView // TODO Auto-generated method stub val inflater = (context as Activity).layoutInflater convertView = inflater.inflate(R.layout.rowlistitem, parent, false) val name = convertView!!.findViewById<View>(R.id.txtNameNote) as TextView val percent = convertView.findViewById<View>(R.id.txtPercent) as TextView val cb = convertView.findViewById<View>(R.id.cbx) as CheckBox name.text = listNote[position].name percent.text = "Percent: " + listNote[position].percent + "%" if (listNote[position].status == NoteStatus.Active.value) cb.isChecked = false else{ name.paintFlags = (name.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG) cb.isChecked = true } } } return convertView } } 有人可以帮我吗? Kotlin 中正确的方法是创建回调。然后,您在适配器中创建一个点击侦听器并将结果转发到您的回调。 class CustomAdapter( internal var context: Context, resource: Int, internal var listNote: ArrayList<Note>, val callback: (Note) -> Unit) : ArrayAdapter<Note>(context, resource, listNote) { override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { // .. do your bindings whatever convertView.yourRootLayoutElement.setOnClickListener{ if (callback != null) callback(listNote[position]) } return convertView } } 在您创建适配器的视图中 CustomAdapter(...., { info { "Clicked $it" } }) 我没有测试过,因为我不使用ListView。我推荐你使用RecyclerView。 ListView 已被弃用,并且出于多种原因不推荐使用。请阅读此处的一些原因。 编辑:绝对没有理由使用ListView而不是RecyclerView。即使它有效,你也不应该使用它。了解 RecyclerView,因为 ListView 应该不再使用。 以下代码用于使用列表视图制作测验应用程序 自定义适配器代码 package com.example.myapplication import android.content.Context import android.content.Intent import android.graphics.Color import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.provider.MediaStore.Audio.Radio import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter import android.widget.Button import android.widget.ListView import android.widget.RadioButton import android.widget.RadioGroup import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.constraintlayout.widget.ConstraintLayout import org.w3c.dom.Text import java.lang.Exception data class QuizOption( val optionText: String, val isCorrect: Boolean ) data class Question( val questionText: String, val options: List<QuizOption>, ) class QuestionAdapter(private val context: Context, public val questions: List<Question>) : BaseAdapter() { override fun getCount(): Int { return questions.size } override fun getItem(p0: Int): Any { return questions[p0] } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { val view = p1 ?: LayoutInflater.from(context).inflate(R.layout.quiz_list, p2, false) val question = questions[p0] val questionText = view.findViewById<TextView>(R.id.question) val option1RadioButton = view.findViewById<RadioButton>(R.id.opt1); val option2RadioButton = view.findViewById<RadioButton>(R.id.opt2); val option3RadioButton = view.findViewById<RadioButton>(R.id.opt3); val option4RadioButton = view.findViewById<RadioButton>(R.id.opt4); questionText.text = question.questionText option1RadioButton.text = question.options[0].optionText option2RadioButton.text = question.options[1].optionText option3RadioButton.text = question.options[2].optionText option4RadioButton.text = question.options[3].optionText option1RadioButton.tag = question.options[0].isCorrect option2RadioButton.tag = question.options[1].isCorrect option3RadioButton.tag = question.options[2].isCorrect option4RadioButton.tag = question.options[3].isCorrect return view } } 其余主要代码 class QuizPage : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_quiz_page) val name = intent.getStringExtra("Name") val nameView = findViewById<TextView>(R.id.nameView) nameView.text = "Hello $name!" val questions = listOf<Question>(Question("Question 1", listOf(QuizOption("Option 1", true),QuizOption("Option 2", false),QuizOption("Option 3", false),QuizOption("Option 4", false))),Question("Question 2", listOf(QuizOption("Option 1", false),QuizOption("Option 2", true),QuizOption("Option 3", false),QuizOption("Option 4", false))),Question("Question 3", listOf(QuizOption("Option 1", false),QuizOption("Option 2", false),QuizOption("Option 3", true),QuizOption("Option 4", false)))) val listView = findViewById<ListView>(R.id.listView) val adapter = QuestionAdapter(this, questions) listView.adapter = adapter val button = findViewById<Button>(R.id.button2) button.setOnClickListener{ val alertDialogBuilder = AlertDialog.Builder(this) alertDialogBuilder.setTitle("Confirm Submission!") alertDialogBuilder.setMessage("Are you sure that you want to submit your answers?") alertDialogBuilder.setPositiveButton("Yes") { _, _, -> var totalScore = 0 for (i in 0 until 4) { val radioGroup = listView.getChildAt(i)?.findViewById<RadioGroup>(R.id.radioGroup) if (radioGroup != null) { val selectedRadioButtonId = radioGroup.checkedRadioButtonId if (selectedRadioButtonId != -1) { val radioButton = radioGroup.findViewById<RadioButton>(selectedRadioButtonId) val isCorrect = radioButton.tag as Boolean Toast.makeText(this, "question $i correct ${radioButton.tag}", Toast.LENGTH_SHORT).show() if(isCorrect){ totalScore += 10 } else{ totalScore -=5 } } } } if(totalScore>10){ val cL = findViewById<ConstraintLayout>(R.id.cL) cL.setBackgroundColor(Color.parseColor("#00FF00")) } // button.visibility = View.GONE Toast.makeText(this, "Total Score: $totalScore", Toast.LENGTH_LONG).show() val intent = Intent(this, alarm::class.java) intent.putExtra("Score", totalScore) startActivity(intent) } alertDialogBuilder.setNegativeButton("Cancel"){_, _, -> Toast.makeText(this, "No", Toast.LENGTH_LONG).show() } alertDialogBuilder.show(); } } }
我是 SwiftUI 新手,我正在尝试弄清楚如何设置保持不变的 TabView 的默认页面 我的 TabView 嵌套在 ListView 中,并且我设置了 @State private var Selection = 1,这...
MAUI:Listview 中的 UI 对齐问题,网格有 3 列
我在 Listview 中遇到 UI 对齐问题,其中 Grid 有 3 列,如下图所示: 我的列表视图代码: 我在 Listview 中遇到 UI 对齐问题,网格有 3 列,如下图所示: 我的列表查看代码: <ListView x:Name="MyCustomers" ItemsSource="{Binding AllItems,Mode=TwoWay}" RowHeight="{OnIdiom Phone=80, Tablet=110, Desktop=80}" IsPullToRefreshEnabled="True" HasUnevenRows="True" CachingStrategy="RecycleElement" RefreshCommand="{Binding RefreshCommand}" IsRefreshing="{Binding IsRefreshing}"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <ViewCell.View> <Grid HorizontalOptions="FillAndExpand" VerticalOptions="CenterAndExpand"> <Grid.ColumnDefinitions> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="6*" /> <ColumnDefinition Width="2*" /> </Grid.ColumnDefinitions> <Grid Grid.Column="0" HorizontalOptions="Start"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="12.25*" /> </Grid.ColumnDefinitions> <Grid VerticalOptions="CenterAndExpand" HorizontalOptions="Start" Grid.Column="1"> <Image Source="ic_profilebg_xx.png" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" x:Name="imagebg" Aspect="AspectFit"> <Image.HeightRequest> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>60</OnIdiom.Phone> <OnIdiom.Tablet>90</OnIdiom.Tablet> <OnIdiom.Desktop>60</OnIdiom.Desktop> </OnIdiom> </Image.HeightRequest> <Image.WidthRequest> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>60</OnIdiom.Phone> <OnIdiom.Tablet>90</OnIdiom.Tablet> <OnIdiom.Desktop>60</OnIdiom.Desktop> </OnIdiom> </Image.WidthRequest> </Image> <Label Text="{Binding user.fullname,Converter={StaticResource profilenameConverter}}" Style="{StaticResource InitalLabelStyle}"/> </Grid> </Grid> <StackLayout Grid.Column="1" Margin="3,0,0,0" HorizontalOptions="Start" VerticalOptions="CenterAndExpand" Orientation="Vertical"> <Label Text="{Binding user.fullname, Converter={StaticResource nameConverter}}" FontFamily="Bold" VerticalTextAlignment="Center" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" TextColor="#676767" IsVisible="{Binding user.fullname, Converter={StaticResource nullCheckConverter}}"> <Label.FontSize> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>15</OnIdiom.Phone> <OnIdiom.Tablet>20</OnIdiom.Tablet> <OnIdiom.Desktop>15</OnIdiom.Desktop> </OnIdiom> </Label.FontSize> </Label> <Label Text="{Binding user.email}" VerticalOptions="CenterAndExpand" TextColor="#676767" VerticalTextAlignment="Center" HorizontalOptions="Start" HorizontalTextAlignment="Start" IsVisible="{Binding user.email , Converter={StaticResource nullCheckConverter}}"> <Label.FontSize> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>12</OnIdiom.Phone> <OnIdiom.Tablet>18</OnIdiom.Tablet> <OnIdiom.Desktop>12</OnIdiom.Desktop> </OnIdiom> </Label.FontSize> </Label> <Label Text="{Binding phoneNumber, Converter={StaticResource phoneNumberFormatConverter}}" VerticalTextAlignment="Center" VerticalOptions="CenterAndExpand" HorizontalOptions="Start" HorizontalTextAlignment="Start" TextColor="#676767" IsVisible="{Binding isPhoneEmpty}"> <Label.FontSize> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>12</OnIdiom.Phone> <OnIdiom.Tablet>18</OnIdiom.Tablet> <OnIdiom.Desktop>12</OnIdiom.Desktop> </OnIdiom> </Label.FontSize> </Label> <!--<StackLayout.WidthRequest> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>200</OnIdiom.Phone> <OnIdiom.Tablet>300</OnIdiom.Tablet> <OnIdiom.Desktop>200</OnIdiom.Desktop> </OnIdiom> </StackLayout.WidthRequest>--> </StackLayout> <StackLayout Grid.Column="2" Orientation="Vertical" VerticalOptions="CenterAndExpand" HorizontalOptions="EndAndExpand"> <StackLayout Margin="0,0,0,5" HorizontalOptions="FillAndExpand" BackgroundColor="#5abcd7"> <Label Text="{Binding pointsToVisualize}" FontFamily="Bold" HorizontalOptions="CenterAndExpand" HorizontalTextAlignment="Center" TextColor="White"> <Label.FontSize> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>15</OnIdiom.Phone> <OnIdiom.Tablet>20</OnIdiom.Tablet> <OnIdiom.Desktop>15</OnIdiom.Desktop> </OnIdiom> </Label.FontSize> </Label> <!--<StackLayout.WidthRequest> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>80</OnIdiom.Phone> <OnIdiom.Tablet>120</OnIdiom.Tablet> <OnIdiom.Desktop>80</OnIdiom.Desktop> </OnIdiom> </StackLayout.WidthRequest>--> <StackLayout.Padding> <OnIdiom x:TypeArguments="Thickness"> <OnIdiom.Phone>3</OnIdiom.Phone> <OnIdiom.Tablet>6</OnIdiom.Tablet> <OnIdiom.Desktop>3</OnIdiom.Desktop> </OnIdiom> </StackLayout.Padding> </StackLayout> <StackLayout Orientation="Horizontal"> <Image VerticalOptions="Center" Source="ic_action_time.png"> <Image.WidthRequest> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>13</OnIdiom.Phone> <OnIdiom.Tablet>20</OnIdiom.Tablet> <OnIdiom.Desktop>13</OnIdiom.Desktop> </OnIdiom> </Image.WidthRequest> <Image.HeightRequest> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>13</OnIdiom.Phone> <OnIdiom.Tablet>20</OnIdiom.Tablet> <OnIdiom.Desktop>13</OnIdiom.Desktop> </OnIdiom> </Image.HeightRequest> </Image> <Label Margin="2,0,0,0" Text="{Binding user.updatedTime, Converter={StaticResource cnvDateTimeConverter}}" TextColor="#5abcd7" HorizontalOptions="FillAndExpand" VerticalOptions="Center"> <Label.FontSize> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>10</OnIdiom.Phone> <OnIdiom.Tablet>15</OnIdiom.Tablet> <OnIdiom.Desktop>10</OnIdiom.Desktop> </OnIdiom> </Label.FontSize> </Label> <StackLayout.Margin> <OnIdiom x:TypeArguments="Thickness"> <OnIdiom.Phone>3</OnIdiom.Phone> <OnIdiom.Tablet>6</OnIdiom.Tablet> <OnIdiom.Desktop>3</OnIdiom.Desktop> </OnIdiom> </StackLayout.Margin> <!--<StackLayout.WidthRequest> <OnIdiom x:TypeArguments="x:Double"> <OnIdiom.Phone>115</OnIdiom.Phone> <OnIdiom.Tablet>300</OnIdiom.Tablet> <OnIdiom.Desktop>50</OnIdiom.Desktop> </OnIdiom> </StackLayout.WidthRequest>--> </StackLayout> </StackLayout> <Grid.Margin> <OnIdiom x:TypeArguments="Thickness"> <OnIdiom.Phone>3</OnIdiom.Phone> <OnIdiom.Tablet>6</OnIdiom.Tablet> <OnIdiom.Desktop>3</OnIdiom.Desktop> </OnIdiom> </Grid.Margin> <Grid.Padding> <OnIdiom x:TypeArguments="Thickness"> <OnIdiom.Phone>3</OnIdiom.Phone> <OnIdiom.Tablet>6</OnIdiom.Tablet> <OnIdiom.Desktop>3</OnIdiom.Desktop> </OnIdiom> </Grid.Padding> </Grid> </ViewCell.View> </ViewCell> </DataTemplate> </ListView.ItemTemplate> <ListView.Footer> <Label/> </ListView.Footer> </ListView> 我尝试在演示项目中重现此问题,并且在演示中工作正常。演示项目已上传此处。 使用相同的代码,UI在演示项目中没有问题,但在我的实际项目中出现问题,可能是什么原因? 注意:如果我取消第二列的 StackLayout.WidthRequest 注释,UI 对齐问题就会得到解决。 我已经复制了你的项目并重现了你的问题。 使用相同的代码,UI在演示项目中没有问题,但在我的实际项目中出现问题,可能是什么原因? 这是因为演示项目中列表视图的所有项目都是相同的。但是你的真实项目每个项目都有不同的数据(堆栈布局不同)。 如果我取消第二列的 StackLayout.WidthRequest 注释,UI 对齐问题就会得到解决。 这是因为您使每个项目的宽度相同。我发现 StackLayout 中的 HorizontalOptions="Start" 不适用于您的项目(目标 .net 7.0)。但我在 .net 8.0 中测试了相同的代码,并且 HorizontalOptions="Start" 运行良好。 UI 对齐问题消失了。 因此您可以尝试将项目升级到目标网络 8.0 来解决此问题。并且您可以在存储库上报告此问题。
如何实现用户滑动分页? (之前使用过 UICollectionView -> 启用分页)
背景:我正在将一个项目从 UIKit 转换为 SwiftUI。目前使用 UIKit,我在 UICollectionView 中有一个 UICollectionView,两者都启用了分页。这允许用户向上/向下滑动和
SwiftUI:如何实现用户滑动分页? (之前使用过 UICollectionView -> 启用分页)
背景:我正在将一个项目从 UIKit 转换为 SwiftUI。目前使用 UIKit,我在 UICollectionView 中有一个 UICollectionView,两者都启用了分页。这允许用户向上/向下滑动和
我在 Flutter 应用程序中遇到一个问题,在 TextFormField 中仅输入或删除一个字符后键盘会自动关闭。我有一个带有 Dismissible wid 的 ListView.builder...
我是编码新手,所以请温柔对待我。我尝试过研究这个主题,但似乎找不到能让我走上正确道路的答案。 我有一个程序,有一个 ListView 并在...
在 Qt6 QML 中的 ListView 中将项目向右对齐
我想要一个适合其最大项目宽度的ListView。 我还希望列表视图中的项目右对齐。 因此,作为一种天真的方法,我这样做了: 窗户 { 宽度:64...
应该足够简单和常见:我想覆盖 GridView ColumnHeader 上的悬停颜色。 所以我使用 、a 和 a ,...
WPF 如何从 ListView GridView 中绑定到 ViewModel 中的 ICommand?
我有一个使用 MVVM 的 WPF 应用程序。我有一个以视图模型作为其数据上下文的视图。在视图内部,我有一个绑定到可观察集合的 ListView。在 ListView 的每一行上,我都有...
我想创建一个水平列表视图,它以一定的速度自动滚动,无需用户干预。另外,这个滚动应该无限地完成,并且列表视图应该重复。 在...