2016-05-18 4 views
-1

問題はに意見の不特定多数を追加します。 現在の子ビューの範囲は2-7ですが、数量に制限はありません。動的のViewGroup

私の最初のアプローチは、コードに純粋であった:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
lp.gravity = Gravity.CENTER; 

for (String answer : generateAnswers()) { 
    CheckBox checkBox = new CheckBox(getContext()); 
    checkBox.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17); 
    checkBox.setGravity(Gravity.CENTER); 
    checkBox.setText(answer); 
    mvAnswersLayout.addView(checkBox, lp); 
} 

チェックボックス項目がXMLに住むべきであるように感じるので、第二の変形例:

LayoutInflater inflater = LayoutInflater.from(getActivity()); 
for (String answer : generateAnswers()) { 
    View v = inflater.inflate(R.layout.answer_item, mvAnswersLayout, true); 
    CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkbox_id); 
    checkBox.setText(answer); 
    checkBox.setId(General.generateViewId()); 
} 

<merge xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBox 
     android:id="@+id/checkbox_id" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:textSize="17sp" 
     android:padding="4dp" 
     /> 
</merge> 

Iタグ<merge>を使用する冗長のViewGroupを除去し、ユーティリティView.generateViewId()

第2のアプローチは、すべてのアンドロイドの開発者が期待する方法だと思われます。しかし、私にとって気になるのは、findViewById()に複数回(次の時間が少し遅くなる)です。

賛否両論はありますか?あなたは多くのチェックボックスを持っている場合

+1

はRecyclerviewが輝くリサイクルの必要性を真に無制限のリストについては、このような例 – pskink

+0

にListView'または '' RecyclerView'のようないくつかの「アダプタ」ビューを使用します。しかし、私はメカニックに興味があり、次の質問はなぜRecyclerviewがタグを使用しないのだろうか? –

+0

あなたは 'Recyclerview'で使用する場合、何が必要ですか?? – pskink

答えて

1

ベターは、パフォーマンスの向上のためにチェックボックスとして、各行でRecyclerviewまたはリストビューを使用します。また、状態を維持することは、recylerviewまたはlistviewでも簡単です。

+0

Recyclerviewをリサイクルする必要がある、本当に無制限のリストのために。しかし、私はメカニックに興味があり、次の質問はなぜRecyclerviewが ''タグを使用しないのだろうか? –

0

あなたがRecycleViewまたはリストビューを使用せずに動的に追加したい場合は、次のような

ViewGroup.LayoutParams checkbox_relativeParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
      checkbox_relativeParams.width = ViewGroup.LayoutParams.MATCH_PARENT; 
      checkbox_relativeParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; 
      CheckBox cb = new CheckBox(getActivity()); 
      cb.setText("I'm dynamic!"); 
      cb.setGravity(Gravity.CENTER); 
      cb.setTextSize(17); 
      cb.setPadding(4,4,4,4); 
      cb.setLayoutParams(checkbox_relativeParams); 

の下にあるチェックボックスを作成し、動的にレイアウトするには、このチェックボックスを追加することができます。 findViewbyID(ID)のためのアウト要求に

this.addView(cb, checkbox_relativeParams); 

レイアウトで唯一のウィジェットがある常にあります。

関連する問題