Android - 如何才能获得以编程方式添加的视图?

时间:2013-10-01 16:02:01

标签: android android-layout mobile layout horizontalscrollview

我有以下问题。这是我的布局的一个小草图(只有相关的部分):

<HorizontalScrollView
            android:id="@+id/horizontalScrollView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="none"
             >

            <LinearLayout
                android:id="@+id/horizontalLayoutContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal" >
            </LinearLayout>
</HorizontalScrollView>

现在我在horizo​​ntalLayoutContainer ID布局中添加了四个按钮。我希望能够禁用容器内的按钮,但粗略的我不是:(( 如何获得与已添加的按钮相关的视图? (我不能在按钮上使用generateID,因为它可以从API 17获得。)

我还尝试手动设置ID,从0开始,结果是我能够捕获ID = 0而不是其他ID :(( 请帮忙

由于

编辑:     ViewGroup mLayout =(ViewGroup)((FragmentActivity)mContext).findViewById(rootLayoutID);

                    if(mLayout!=null){
                        for(int i = 0; i <  mLayout.getChildCount(); i++)
                        {
                            View view = mLayout.getChildAt(i);

                            if(!(view instanceof Button))
                                setViewsEnabled(mContext, view.getId(), enable);
                            else{
                                Log.debug(tag, "I'm a button with ID: "+ view.getId());
                                view.setEnabled(enable);
                                view.setClickable(enable);
                            }
                            view.setEnabled(enable);
                        }
                        mLayout.setEnabled(enable);
                    }
                }

使用这部分代码,除了按钮之外,我可以禁用布局中的所有内容。正如您所看到的,我还创建了一个打印4次的日志(正好是按钮的编号),但ID = 0;

已解决:我找到了一个解决方案,通过编程方式(从0开始递增)ID,然后如下所示制作if / else,以便识别定义按钮的正确活动:

             /*
              * Se l'istanza e' MainActivity disabilito/abilito manualmente i bottoni
               */
                        if(mContext.getClass() == MainActivity.class){
                            ViewGroup horizontalScrollViewViewGroup = (ViewGroup)
                                    ((FragmentActivity) mContext).findViewById(R.id.horizontalLayoutContainer); 

                            if(horizontalScrollViewViewGroup!=null){
                                Log.debug(tag, "Buttons Number: "+horizontalScrollViewViewGroup.getChildCount());

                                for(int i = 0; i < horizontalScrollViewViewGroup.getChildCount(); i++){
                                    View view = ((FragmentActivity) mContext).findViewById(i);
                                    if(view!=null){
                                        view.setClickable(enable);
                                        view.setEnabled(enable);
                                    }
                                }
                            }
                        }

2 个答案:

答案 0 :(得分:0)

每当您创建动态视图时,您都可以将该ID指定为

final int  ID=1001;
Button btn=new Button (this);
btn.setId(ID);

并使用

获取视图
findviewbyid(ID) ;

答案 1 :(得分:0)

View.findViewWithTag可以提供帮助,但是......等等,你通过addView(View)添加它们,所以你已经引用了它们