1

私は1つのヘルプが必要です。私は動的に線形レイアウトを作成しましたが、作成された線形レイアウトの可視性を変更する必要があります。遠くonBackPressedで動的に作成されたレイアウトの可視性を変更します。

私の努力ショー:

for (int i=0;i<qty;i++) { 
      final View view1 = LayoutInflater.from(BookingDetails.this).inflate(R.layout.dynamic_truck_item, null); 
      view_visible.add(false); 
      final LinearLayout view_dd=(LinearLayout)view1.findViewById(R.id.view_dd); 
} 

戻るプレス:

@Override 
    public void onBackPressed() { 
     if (backPressedToExitOnce) { 
      super.onBackPressed(); 

     } else { 
      this.backPressedToExitOnce = true; 

      // Here i have to set the visibility of created linear layout to VIEW.GONE 

     } 

    } 
+0

なぜこのコードをループに入れていますか? –

+0

、私は線形レイアウトを動的にqtyに依存して作成したいからです。 –

+0

すべての新しいレイアウトを配列に追加し、onBackPressedの配列内のすべての項目に可視性を設定します。 – lewkka

答えて

2

作成LienarLayoutsへのすべての参照を保持するためのArrayList

private ArrayList<View> collectionOfViews = new ArrayList(); 

あなたのレイアウトが追加膨らませますビューへのリスト:

for (int i=0;i<qty;i++) { 
     final View view1 = LayoutInflater.from(BookingDetails.this).inflate(R.layout.dynamic_truck_item, null); 
     view_visible.add(false); 
     final LinearLayout view_dd=(LinearLayout)view1.findViewById(R.id.view_dd); 
     collectionOfViews.add(view_dd); 
} 

はその後onBackPressedで使用して可視性を設定します。

for(View view : collectionOfViews) { 
    view.setVisibility(View.GONE); 
} 
+0

しかし、もし私がクラスレベルでLinearLayoutの配列をとって、私たちがループ内のidをどのように定義すれば、xmlの私の線形レイアウトのidを定義しました。コードをいくつか追加するともっと役に立ちます –

+0

idはインフレーション中にのみ使用され、Viewオブジェクトへの参照で終わった後は可視性を変更するのに十分です。私は答えを更新しました –

+0

ありがとう、それは働いた:) –

1

あなたがループからビューVIEW1を取る必要があり、その後、あなたがインデックスにビューを追加するためののViewGroupを取る必要があります。あなたのonBackPressedでその後

((ViewGroup)view1.findViewById(R.id.background)).addView(child, index); 

()あなたが目に見える/ゴーンへのインデックスで表示し、簡単に設定し、視認性を得ることができ
方法。

@Override 
public void onBackPressed() { 
    ((ViewGroup)view1.findViewById(R.id.background)).getChildAt(index).setVisibility(View.GONE); 
} 
+1

ありがとう、良い答え:) –

+0

それは 'view1'は他の子がない場合にのみ動作します –

関連する問題