2017-06-20 2 views
-1

Ich habe folgende lineare layour:Ich muss Ansichten von einem für instanziieren und ändern. Ist es möglich, die IDs für das i zu erhalten?

<?xml version="1.0" encoding="utf-8"?> 

<View 
    android:id="@+id/white1" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white2" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white3" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white4" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white5" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white6" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white7" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white8" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white9" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white10" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/white_mic_value"/> 
<View 
    android:id="@+id/white11" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/half_white_mic_value"/> 
<View 
    android:id="@+id/white12" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/half_white_mic_value"/> 
<View 
    android:id="@+id/white13" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/half_white_mic_value"/> 
<View 
    android:id="@+id/white14" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/half_white_mic_value"/> 
<View 
    android:id="@+id/white15" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/half_white_mic_value"/> 
<View 
    android:id="@+id/white16" 
    android:layout_width="8dp" 
    android:layout_height="30dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/half_white_mic_value"/> 

und ich möchte, dass sie in eine verwenden, um, so etwas wie:

for(int i= 1 ; i < 17; i++){ 
    if(soundMeter.getAmplitude() > i*viewThreshold) { 
     rootView.findViewById(R.id.white+).setBackgroundResource(R.drawable.white_mic_value); 
    }else{ 
     rootView.findViewById(R.id.white+i).setBackgroundResource(R.drawable.half_white_mic_value); 
    } 
} 

ich versucht: int id = getResources().getIdentifier("white" + i, "view", getActivity().getPackageName()); aber es stürzt mit dem folgenden Fehler ab:

06-20 09:12:45.011: E/InputEventSender(28432): Exception dispatching finished signal. 
06-20 09:12:45.011: E/MessageQueue-JNI(28432): Exception in MessageQueue callback: handleReceiveCallback 
06-20 09:12:45.031: E/MessageQueue-JNI(28432): java.lang.NullPointerException 

Antwort

1

Klassische Android-Problem, zumindest für mich. Was Sie versuchen zu erreichen, ist meines Wissens nicht syntaktisch möglich, aber es gibt andere Wege. Du hast mindestens 2 Optionen hier.

  1. Dynamisch die Ansichten im Code erstellen. Dies würde in etwa wie folgt aussehen:

    LinearLayout layout = new LinearLayout(ArmedResponseDetailsActivity.this); 
    TableLayout.LayoutParams layoutParams = new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    layout.setLayoutParams(layoutParams); 
    for (int i = 0; i < 10; i++) { 
        View v = new View(ArmedResponseDetailsActivity.this); 
        TableLayout.LayoutParams viewParams = new TableLayout.LayoutParams(8, 30); 
    layoutParams.rightMargin = 5; 
        v.setLayoutParams(viewParams); 
        v.setBackground(R.drawable.white_mic_value); 
        layout.addView(v); 
    } 
    
  2. ein ListView Verwenden Sie zusammen mit einem ArrayAdapter.

Der professionellere und bevorzugte Weg wäre # 2. Andererseits scheint es, dass Sie möglicherweise Bilder verwenden. Wenn das der Fall ist, könnten Sie eine Bibliothek wie Glide betrachten.

+0

Ich brauche nur ein Mikrofon Amplitude Ansicht, ähnlich wie diese machen: https://s3.amazonaws.com/uploads.hipchat.com/39260/829560 /3tVsu9UkFrDlarJ/upload.png Ich dachte daran, mit der Logik zu gehen, um sie dynamisch zu erstellen, aber ich bevorzuge eine XML, eine feste Anzahl von Elementen, und auch mit Buttermesser, es injiziert sie, so dass es schneller ist. Also habe ich sie einfach in der XML-Datei belassen, und zwar mit einem Array von Ints: D –

0

ich es so tat:

int[] micIDS = new int[] {R.id.white1, R.id.white2, R.id.white3, R.id.white4, R.id.white5, R.id.white6, R.id.white7, R.id.white8, R.id.white9, R.id.white10, R.id.white11, R.id.white12, R.id.white13, R.id.white14, R.id.white15, R.id.white16 }; 
           for(int i= 1 ; i < 17; i++){ 
            View view = rootView.findViewById(micIDS[i-1]); 
            Log.i("","view background: " + view.getBackground().toString()); 
            if(amplitude > i*viewThreshold) { 
             view.setBackgroundResource(R.drawable.white_mic_value); 
            }else{ 
             view.setBackgroundResource(R.drawable.half_white_mic_value); 
            } 
           } 
Verwandte Themen