将所有CheckBox扩展到Android中的多个视图

时间:2016-09-24 21:03:38

标签: java android layout android-edittext android-checkbox

我的活动包含多个EditTextCheckBox个es。其中一些是由用户动态添加的。我想要一个包含所有EditText - 和CheckBox - 对象的数组。 我在XML中使用LinearLayout,RelativeLayout和TableLayout。 我试过这个:

public void getAllEditTextsAndCheckBoxes(View view){

    ArrayList<View> views = new ArrayList<View>();

    for (int i = 0; i < this.mainScrollView.getFocusables(View.FOCUS_FORWARD).size(); i++) {

       View actualView = mainScrollView.getFocusables(View.FOCUS_FORWARD).get(i);


        if(actualView instanceof EditText) {
            views.add((EditText) actualView);
        }
        if(actualView instanceof CheckBox) {
            views.add((CheckBox) actualView);
        }

    }

}

但这只给了我EditText而不是CheckBox<?xml version="1.0" encoding="utf-8"?> <ScrollView> <LinearLayout> <!-- several LinearLayouts and Buttons--> <RelativeLayout> <TableLayout> <TableRow> </TableRow> <TableRow> <EditText/> **<CheckBox/>** </TableRow> <TableRow> <EditText/> **<CheckBox/>** </TableRow> </TableLayout> </RelativeLayout> <!-- some other LinearLayouts and Buttons --> </LinearLayout> 这是我凌乱的xml文件的结构:

http-server

(我试图忽略不重要的信息,但由于我不知道你需要多少,我不能做得很短:http://pastebin.com/DnQnxtVJ

2 个答案:

答案 0 :(得分:1)

您是否尝试过获取相关视图的所有子项并迭代它们?我自己从未使用getFocusables()。也许复选框不可调焦,只能点击,因此它们不会出现?如果是这样,您可以尝试在创建对象时添加.setFocusable(true)

否则,我会这样做:

for(int i=0; i<((ViewGroup)ViewGroupToIterate).getChildCount(); i++) {
    View nextChild = ((ViewGroup)ViewGroupToIterate).getChildAt(i);
    if(nextChild instanceof EditText) {
        views.add((EditText) actualView);
    }
    if(nextChild instanceof CheckBox) {
        views.add((CheckBox) actualView);
    }
}

答案 1 :(得分:1)

我已使用给定的布局测试了您的模块,并按预期返回结果。我创建了一个Fragment并将xml作为布局传递给它。片段一旦添加到活动中。我能够提取所有复选框和EditText视图。检查添加的日志。

    @Override
    public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        getAllEditTextsAndCheckBoxes(view);

    }

    public void getAllEditTextsAndCheckBoxes(View view){

        ArrayList<View> returnViews = new ArrayList<View>();

        ArrayList<View> focusableViews = view.getFocusables(View.FOCUS_FORWARD);

        for (int i = 0; i < focusableViews.size(); i++) {

            View actualView = focusableViews.get(i);

            if(actualView instanceof EditText) {
                returnViews.add((EditText) actualView);
            }
            if(actualView instanceof CheckBox) {
                returnViews.add((CheckBox) actualView);
            }

        }

        for(View mView: returnViews){
            if (mView instanceof  EditText){
                Log.d("ash_sow", "EditText Found!!");
            }
            else if(mView instanceof CheckBox){
                Log.d("ash_sow", "CheckBox Found!!");
            }
        }

    }

所以我认为当您尝试在运行时添加组件时可能会发生这种情况,或者可能是其他问题。所以,再试一次,仔细看看可能的嫌疑人。