如何解决如何通过在Android Studio中按一个按钮来检查一组复选框?
我试图在单击按钮时标记一个复选框组。我动态添加的这些复选框。
这里有一些复选框(在此示例中,只有4个复选框,但可以有更多复选框):
Checkbox checkboxes1;
Checkbox checkboxes2;
Checkbox checkboxes3;
Checkbox checkboxes4;
checkboxes1.setId(1);
checkboxes2.setId(2);
checkboxes3.setId(3);
checkboxes4.setId(4);
问题是当我尝试手动检查所有它们时。我有以下代码:
public void onCheckboxAllChecked(View view){
Checkbox addAll;
for(int i = 0; i < 4; i++){
addAll = findViewById(i);
addAll.setChecked(true);
}
}
但是当我尝试按下按钮以选中所有复选框时,该应用程序停止运行并突然关闭。
我将它放在for循环中,因为可以有更多的复选框(由用户来定义要动态添加的复选框)。
那么,如何解决这个问题呢?我在做什么错了?
注意:问题不是创建复选框,因为它们创建的很好,当我分别检查每个复选框时,它可以正常工作。问题是通过单击一个按钮同时检查所有这些对象。
解决方法
据我所知,if(len <= 1) return array;
方法用于检索XML文件中定义的某些import SwiftUI
import SafariServices
struct RootView: View,Hostable {
@EnvironmentObject private var hostedObject: HostingObject<Self>
let address: String
let title: String
func present() {
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
let safari = SFSafariViewController(url: URL(string: address)!,configuration: config)
hostedObject.viewController?.present(safari,animated: true)
}
var body: some View {
Button(title) {
self.present()
}
}
}
struct ContentView: View {
@State private var articlesList = [
ArticlesList(id: 0,title: "Apple",link: "http://apple.com",lang: "en"),ArticlesList(id: 1,title: "Yahoo",link: "http://yahoo.com",ArticlesList(id: 2,title: "microsoft",link: "http://microsoft.com",ArticlesList(id: 3,title: "Google",link: "http://google.com",lang: "en")
]
var body: some View {
NavigationView{
//Here is the problem when I add RootView inside a List or ScrollView it does not show Safari.
ScrollView(.vertical,showsIndicators: false) {
VStack{
ForEach(articlesList) {article in
RootView(address: article.link,title: article.title).hosting()
Spacer(minLength: 10)
}
}
}
.navigationBarTitle("Articles")
}
}
}
struct ArticlesList: Identifiable,Codable {
let id: Int
let title: String
let link: String
let lang: String
}
struct UIViewControllerView: UIViewControllerRepresentable {
final class ViewController: UIViewController {
var didAppear: (UIViewController) -> Void = { _ in }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
didAppear(self)
}
}
var didAppear: (UIViewController) -> Void
func makeUIViewController(context: Context) -> UIViewController {
let viewController = ViewController()
viewController.didAppear = didAppear
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController,context: Context) {
//
}
}
struct UIViewControllerViewModifier: ViewModifier {
var didAppear: (UIViewController) -> Void
var viewControllerView: some View {
UIViewControllerView(didAppear:didAppear).frame(width:0,height:0)
}
func body(content: Content) -> some View {
content.background(viewControllerView)
}
}
extension View {
func uiViewController(didAppear: @escaping (UIViewController) -> ()) -> some View {
modifier(UIViewControllerViewModifier(didAppear:didAppear))
}
}
class HostingObject<Content: View>: ObservableObject {
@Published var viewController: UIViewController? = nil
}
struct HostingObjectView<Content: View>: View {
var rootView: Content
let hostedObject = HostingObject<Content>()
func getHost(viewController: UIViewController) {
hostedObject.viewController = viewController.parent
}
var body: some View {
rootView
.uiViewController(didAppear: getHost(viewController:))
.environmentObject(hostedObject)
}
}
protocol Hostable: View {
associatedtype Content: View
func hosting() -> Content
}
extension Hostable {
func hosting() -> some View {
HostingObjectView(rootView: self)
}
}
。一种可行的方法是使用findViewById
。
View
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。