0

次の問題があります。これは私のレイアウトの小さなスケッチです(興味のある部分のみ):

<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>

これで、4 つのボタンを horizo​​ntalLayoutContainer ID レイアウトに追加しました。コンテナ内のボタンを無効にできるようにしたいのですが、大まかに言えばそうではありません:((動的に追加されたボタンに関連するビューを取得するにはどうすればよいですか? (ボタンでgenerateIDを使用することはできませんAPI 17 から利用できるため)。

また、ID を 0 から手動で設定しようとしましたが、その結果、ID = 0 のものはキャッチできますが、他のものはキャッチできません :(( 助けてください

ありがとう

編集: 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);
                                    }
                                }
                            }
                        }
4

2 に答える 2

0

View.findViewWithTag can help, but... wait, you added them via addView(View) so you have references to them already

于 2013-10-01T16:13:13.443 に答える
0

動的ビューを作成するときはいつでも、そのビューに id を割り当てることができます

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

を使用してビューを取得します

findviewbyid(ID) ;
于 2013-10-01T16:10:29.213 に答える