【问题标题】:How to find the class of a checkbox that was clicked如何找到被点击的复选框的类
【发布时间】:2016-01-25 10:45:37
【问题描述】:

我有一个具有以下属性的“ChecklistItem”类:

private CheckBox checkBox;
private ImageButton noteButton;
private TextView vitalField;

我的复选框有一个onClick Listener。现在的问题是,当我单击该复选框并调用 OnClick() 方法时,我如何才能确定该复选框是哪个 ChecklistItem 的一部分?

每当我点击一个复选框时,我都想将复选框所属的ChecklistItem 添加到数组中,但OnClick() 只知道调用它的复选框。

我该如何解决这个问题?

【问题讨论】:

  • 让我直截了当地说,当您单击一个复选框时,它应该将一个项目添加到另一个数组中,那么它是什么?细绳?它是独一无二的吗?在您的问题中,您说如何找到课程,这里的“课程”是什么意思?
  • 每个复选框都是 ChecklistItem 类的成员。此类具有其他几个属性,一旦单击复选框对象,我就需要访问这些属性。例如,如果单击 ChecklistItem.checkbox,我希望能够访问该 ChecklistItem 的其他属性。
  • 您是从代码或 XML 中初始化您的复选框,然后将它们分配给此类实例吗?如果您发布了如何链接它们,那将是最好的
  • 初始化 XML 中的复选框,然后将它们分配给此类实例。我想将一个复选框与一个 ChecklistItem 相关联,以便接收连接到该复选框的信息,例如允许用户在选中该复选框后输入文本的 TextView 成员。因此,如果 TextView 对象和 CheckBox 对象都与 ChecklistItem 类相关联,我可以轻松访问 TextView 中与同一个 Checkbox 相关联的文本。有没有更好的方法来链接这些对象?
  • 你必须如何将它们分组,我要求你输入更多代码,这样我就不必输入 1000 行答案我脑子里有太多可能性,我在想象你有一个视图包含一个复选框和一个文本视图和一个图像,当您选中该框时,您可能想要启用或禁用文本字段并对图像执行某些操作,这样您就有一个想要多次使用的视图(否则你不需要这个类),那么你为什么不把它们和一个单独的 xml 文件膨胀它们并将它们添加到你的视图中,或者为它们使用列表视图

标签: java android checkbox onclicklistener android-checkbox


【解决方案1】:

好的,所以这个答案是根据我们的“长时间讨论”

假设您想要创建一个可重复使用的列表视图,并且您编写了一个名为 list_item 的单独 xml 布局文件,如下所示:

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/checkbox"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/text_view"/>

所以现在让我们假设您在活动或片段中或您想要托管视图的任何地方,现在我必须指出这只是一个示例,通常在这种情况下您需要一个列表视图但我再次关于你的应用的细节很少,所以我会保持简单

假设您有一个垂直线性布局,并且您希望将这些“行”添加到其中,每一行代表您的自定义视图之一

    LinearLayout layout = findViewById(R.id.layout);
    LayoutInflater inflater = LayoutInflater.from(this); // This inflater is responsible of creating instances of your view
    View myView = inflater.inflate(R.layout.list_item, layout, false); // This view objects is the view you made in your xml file
    CheckBox checkBox = (CheckBox) myView.findViewById(R.id.checkbox);
    TextView textView = (TextView) myView.findViewById(R.id.text_view);
    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //if checkbox is checked enable textview for example
            // here you have a reference to all the views you just created
            // Weather you want to save them in a class together that's up to you and your app's logic
        }
    });
    layout.addView((myView));

如果列表可能超过屏幕高度,您可能需要将线性布局包裹在滚动视图中。

顺便说一句:ListView 只是一种通过定义您希望每一行如何显示来自动执行此操作的巧妙方法,当然它会为您管理您的视图并在它们到达屏幕时回收它们,但我只是想指出概念。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多