2011-01-08 2 views
0

Ich versuche, den Effekt zu erhalten klicken Hintergrundfarbe für lineares Layout. Ich habe ein anklickbares lineares Layout eingestellt. und aus dem code habe ich auch den click listener die setBackgroundResource gesetzt.Klicken Sie zuerst auf Linearlayout Doesn Flash-Hintergrund klicken Sie auf Farbe, es blinkt nur für den zweiten und nächsten Klick

Hier ist es das xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<LinearLayout 
    android:id="@+id/llinsertmem" 
    android:clickable="true" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="50px"> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="20sp" 
     android:text="PUSH it" 
     /> 
</LinearLayout> 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
</LinearLayout> 

und der Java-Code:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
     LinearLayout linearInsertMem = (LinearLayout)findViewById(R.id.llinsertmem); 
     linearInsertMem.setOnClickListener(new View.OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       v.setBackgroundResource(android.R.drawable.list_selector_background); 
       Toast.makeText(testdoank.this, "succeded", Toast.LENGTH_SHORT) 
        .show(); 
      } 
     }); 
} 

Wenn er zum ersten Mal den klickbaren Linearlayout klicken, wird der Toast Text angezeigt, aber die Hintergrundfarbe Klickeffekt doesn‘ t. Die Flash-Hintergrund-Klickfarbe ist nur Arbeit vom zweiten Klick.

keine Ahnung, was das Problem ist?

Antwort

1

Nach Versuch und Irrtum, irgendwie ist es Arbeit. setzen Sie einfach die setBackgroundResource auch auf die onCreate.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
     LinearLayout linearInsertMem = (LinearLayout)findViewById(R.id.llinsertmem); 
     linearInsertMem.setBackgroundResource(android.R.drawable.list_selector_background); 
     linearInsertMem.setOnClickListener(new View.OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       v.setBackgroundResource(android.R.drawable.list_selector_background); 
       Toast.makeText(testdoank.this, "succeded", Toast.LENGTH_SHORT) 
        .show(); 
      } 
     }); 
} 

Ich kenne die logische Erklärung nicht. wenn du einen Gedanken hast, bitte.

0

In der OnClick-Methode verwenden Sie v als Ansicht, die übergeben wird, aber diese Ansicht möglicherweise nicht die LinearLayout, die Sie den Hintergrund ändern möchten. Sie müssen also eine Variable auf Klassenebene oder eine letzte Varibale erstellen und das Handle für LineraLayout an die onClick-Methode übergeben. Entfernen/geschnitten aus onCreate:

linearInsertMem.setBackgroundResource(android.R.drawable.list_selector_background); 

und in onClick oder Änderung v Einfügen in linearInsertMem.. Ich denke, dass Exlipse wird dann, dass linearInsertMem verlangen muss endgültig sein wie:

final LinearLayout linearInsertMem = (LinearLayout)findViewById(R.id.llinsertmem); 

Oder Sie können dieses Objekt über onCreate wie folgt definieren:

LinearLayout linearInsertMem; 

dann in onCreate Sie Zustand:

linearInsertMem = (LinearLayout)findViewById(R.id.llinsertmem); 

dann onClick Methode wird genau wissen, welche Ansicht Sie ändern möchten, wenn Sie linearInsertMem.setBackgroundResource ...

verwenden
3

Ist im JAVA-Code nichts nötig. Sie können dies nur hinzufügen, als Attribut:

android:background="@android:drawable/list_selector_background" 

Und es funktioniert für mich (auf Android 2.2-Gerät)

Verwandte Themen