2011-06-18 3 views
0

私の活動では、私は約40の線形レイアウトを持っています...基本的に5人の親と上記の親の残りの子供。私は複数の線形レイアウトを持っていますが、一度にバックグラウンドの一部または全部を変更してから、再度変更することはできますか?

私ができることをしたいのは、一部の背景を変更し、ボタンをクリックして他のものの背景を変更することです。

私は問題を抱えています...残念なことに、私の正確なコードは今私がバックグラウンドを変更すると、私はnullに設定する必要があります。

私はJavaのクラスを持っているコードは次のようになります

...

mlayout1= findViewById(R.id.layout1); 

mlayout2= findViewById(R.id.layout2); 

mlayout3= findViewById(R.id.layout3); 

mlayout4= findViewById(R.id.layout3); 

if variable = 1{ 

mlayout1.setBackgroundResource(R.drawable.background_img); 
mlayout2.setBackgroundResource(R.drawable.background_img); 
mlayout3.setBackgroundResource(R.drawable.background_img); 
mlayout4.setBackgroundResource(R.drawable.background_img); 
} 

if variable = 2{ 

mlayout1.setBackgroundResource(R.drawable.background_img); 

mlayout2.setBackgroundResource(null); 

mlayout3.setBackgroundResource(R.drawable.background_img); 

mlayout4.setBackgroundResource(null); 
} 

if variable = 3{ 

mlayout1.setBackgroundResource(R.drawable.background_img); 

mlayout2.setBackgroundResource(null); 

mlayout3.setBackgroundResource(null); 

mlayout4.setBackgroundResource(null); 
} 

と等...

一つの問題は、私は変更する必要があり、約30のレイアウトがあるということです背景と私は一緒に作業している約500の異なる組み合わせ...

私が持っている最大の問題は背景の新しい組み合わせを適用する前に、すべての背景をnullに再設定することです...

私はそれのすべての異なる組み合わせのテーブルを持っています。

次のボタンまたは前のボタンを押すか、組み合わせID番号を入力して背景の正しい組み合わせを点灯させ、次にすべてをリセットしてから次の組み合わせ......

私は、バックグラウンドの新しい組み合わせを描画する前に、すべてをリセットするために別のアクティビティが必要な場合があります。これを効率的に行うにはどうすればよいか分かりません。

私は、Androidに新たなんだと私は今、数週間のためにこれを理解しようとしてきたように私の頭が痛い...

+0

私は正しい方法を見つけようとしています...私はチュートリアルを見て、何時間ものビデオチュートリアルを見てきました。これをどうやって行うのか。背景を変えてから、もう一度変えたい、何度も何度も... – EltMrx

答えて

1

あなたがしたいかもしれない最初の事は配列にレイアウトビューを入れていますまたはリストか何かに、あなたはすべての単一の1のID名でコーディングする必要はありませんので:

public void onCreate(Bundle b) { 
    setContentView(R.layout.main); 

    List<View> myViews = new ArrayList<View>(); 
    myViews.add(findViewById(R.id.layout1)); 
    myViews.add(findViewById(R.id.layout2)); 
    // etc. 
} 

次に、あなたは配列に直接プログラムでそれらにアクセスすることができます。しかしそれはまだ多くのコードです。要求された親のために、すべての子どもを見ていきますけれども

public void performSelection(int selection) { 
    // One of your parents that holds a lot of child views 
    ViewGroup parent = (ViewGroup)findViewById(R.id.parent_1); 

    for(int i = 0; i < parent.getChildCount(); i++) { 
     View v = parent.getChildAt(i); 

     // If selection is 1, this sets the drawable background on every item. 
     // If 2, then sets drawable on 0, 2, 4, 6, ... and null on 1, 3, 5, ... 
     // If 3, then sets drawable on 0, 3, 6, 9, ... and null on 1, 2, 4, 5, ... 
     if (i % selection == 0) { 
      v.setBackgroundResource(R.drawable.background_img); 
     } else { 
      v.setBackgroundResource(null); 
     } 
    } 
} 

慎重に、:

あなたが親へのアクセス権を持っている場合は、あなたの選択を行うときに、その子を反復処理することができます。背景を変更するビューのみが含まれていることを確認してください。

もう1つのアプローチ:基本的にレイアウトビューのXMLは同じだがIDは異なる場合は、別々のXMLリソースを作成してから、アクティビティ作成時に親や配列に動的にロードすることを検討することもできます。この場合、メインレイアウトXMLファイルは、実行時に追加されるため、parent_1要素を持ちますが、子ビューはありません。

layout/one_element.xml

<LinearLayout ...> 
    <TextView android:id="@+id/element_text" ... /> 
    <!-- etc --> 
</LinearLayout> 

その後、あなたはこのような何か行うことができます。

public void onCreate(Bundle b) { 
    setContentView(R.layout.main); 

    // One of your parents that will hold a lot of child views 
    ViewGroup parent = (ViewGroup)findViewById(R.id.parent_1); 

    for (int i = 0; i < NUM_CHILDREN; i++) { 
     View newView = getLayoutInflater().inflate(R.layout.one_element, 
                null); 
     // Set anything specific to the new view 
     // eg. 
     TextView tv = (TextView)newView.findViewById(R.id.element_text); 
     tv.setText(String.format("Hi, I'm element %d!", i)); 

     // Add it to the parent 
     parent.addView(newView); 
    } 
} 

その後、あなたは、必要に応じて背景を変更するには、上記performSelectionメソッドを使用することができます。