2016-10-24 3 views
0

Ich habe zwei Schaltflächen für Sprachen und ich möchte sie nach einem Klick auf eine davon ausblenden. Wenn ich das Ereignis onClick in die XML-Datei einfüge und versuche, die Schaltflächen auszublenden, funktioniert es nicht.Warum funktioniert setVisibility nur setOnClickListener, aber nicht in onClick?

Hier ist mein Code:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     button1=(Button)findViewById(R.id.english); 
     button2=(Button)findViewById(R.id.arabic); 
     } 

    public void on_english(View view) { 
     button1.setVisibility(View.GONE); 
     button2.setVisibility(View.GONE); 
} 

Wenn ich button1.setOnClickListener verwenden es funktioniert gut:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    button1=(Button)findViewById(R.id.english); 
    button2=(Button)findViewById(R.id.arabic); 

    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      button1.setVisibility(View.GONE); 
      button2.setVisibility(View.GONE); 
     } 
    }); 

Gibt es irgendwelche Fehler in meinem Code, wenn ich onClick Ereignis verwenden?

Warum funktioniert die setVisibility nur mit setOnClickListener? XML-Datei:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Start.MainActivity" 
    android:background="@mipmap/back"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="@string/label1" 
     android:id="@+id/textView" 
     android:layout_centerHorizontal="true" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="English" 
     android:id="@+id/english" 
     android:onClick="on_english" 
     android:layout_marginBottom="64dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:visibility="visible" 
     android:layout_marginLeft="55dp" 
     android:layout_marginStart="55dp" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="العربية" 
     android:id="@+id/arabic" 
     android:onClick="on_arabic" 
     android:visibility="visible" 
     android:layout_alignTop="@+id/english" 
     android:layout_toRightOf="@+id/textView" 
     android:layout_toEndOf="@+id/textView" /> 

</RelativeLayout> 

Danke.

+1

java! = Android – Ungeheuer

+0

Zeigen Sie uns auch Ihre XML-Datei aussieht, wie der Fehler in der XML-Datei ist –

+0

I XML-Datei –

Antwort

0

Warum nicht Sie dies nur tun:

@Override 
public void onClick(View view) { 
    if (view == button1) { 
     // if view == english 

     button1.setVisibility(View.VISIBLE); 
     button2.setVisibility(View.GONE); 
    } else if (view == button2) { 
     // if view == arabic 

     button1.setVisibility(View.GONE); 
     button2.setVisibility(View.VISIBLE); 
    } 
} 

nur auf Ihrem onCreate hinzufügen:

button1.setOnClickListener(this); 
button2.setOnClickListener(this); 

Zusätzlicher Hinweis: Sie Buttermesser von jake Wharton verwenden können, die at this link für Ansicht Injektion verfügbar ist.

0

Verwenden Sie stattdessen view.setVisibility().

Bearbeiten: Verwenden Sie view.getId(), um die ID der Schaltfläche (R.id.yourButtonId) und eine if-Anweisung zum Festlegen der Sichtbarkeit.

+0

hinzugefügt es nicht und selbst wenn es funktionierte es funktioniert wird eine Taste nur –

+0

ja verstecken, aber ich benutzte button1 und button2 innerhalb der Methode, um sie beide zu verstecken, aber wenn ich View verwendet, wird dies nur Button1 betreffen –

+0

Verwenden Sie 'view.getId', um die Schaltflächen zu erhalten und einen Schalter Fall zu tun. Lass mich meine Antwort aktualisieren ... –

Verwandte Themen