2017-04-09 6 views
0

Ich weiß, dass ähnliche Fragen schon einmal gestellt wurden, aber ich konnte keinen Thread finden, der mein Problem gelöst hat. Ich habe zwei überlappende Elemente (Layout und Button), auf denen ich die Sichtbarkeit durch eine Callback-Methode ändere. Das komische Ding ist, es funktioniert das erste Mal, aber wenn ich es das zweite Mal versuche, funktioniert es nicht. Wenn ich auf die Schaltfläche im Layout klicke, wird das Layout auf View.GONE gesetzt und die andere Schaltfläche btn wird auf View.VISIBLE gesetzt. Wenn ich auf den Button btn klicke, wird eine andere Aktivität gestartet und von dieser Aktivität wird diese Aktivität erneut gestartet. Das ist, wenn die Sichtbarkeit nicht wieder umgeschaltet werden kann, aber wenn ich die gesamte Anwendung neu starte, funktioniert es das erste Mal. Ich habe auch einen Handler anstelle von runOnUiThread(..) verwendet und es hat immer noch nicht funktioniert. Ich habe auch den Status der Sichtbarkeit überprüft, der Status ist sichtbar, wird jedoch immer noch nicht angezeigt.setVisibility (int) funktioniert nicht zum zweiten Mal in einem Callback

Dies ist mein Code:

<LinearLayout 
android:id="@+id/buttonLayout" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_centerHorizontal="true" 
android:layout_marginTop="300px" 
android:weightSum="1"> 

<Button 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="x" 
    android:textColor="@android:color/white" 
    android:id="@+id/testNoBtn" 
    android:onClick="onClick1" 
    android:background="#f44336" 
    android:layout_weight="0.45" 
    android:enabled="false" 
    android:visibility="visible" 
    /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.1" 
    /> 

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="✔" 
    android:textColor="@android:color/white" 
    android:id="@+id/yesBtn" 
    android:onClick="onClick2" 
    android:background="#4caf50" 
    android:layout_weight="0.45" 
    /> 

</LinearLayout> 

<Button 
    android:id="@+id/btn" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="see result" 
    android:background="#03a9f4" 
    android:textColor="@android:color/white" 
    android:layout_alignParentBottom="true" 
    android:layout_marginTop="300px" 
    android:onClick="onContinueClicked" 
    android:visibility="invisible" 
    /> 

Dies ist die nächste Aktivität:

public class Result extends AppCompatActivity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_result); 
     ... 

    } 

    public void tryAgain(){ 

     startActivity(new Intent("android.intent.action.FirstActivity")); 
    } 
} 
+0

Anstelle der überlappenden Schaltfläche verwenden Sie eine einzelne Schaltfläche und ändern den Listener, sobald Sie darauf klicken. –

+0

@ShreyashSSarnayak Nun, die Sache ist, ich habe eigentlich zwei Tasten nebeneinander und dann eine andere Taste, die diese beiden Tasten überlappt, so dass Ihre Lösung nicht funktioniert –

+0

Wie starten Sie Ihre andere Aktivität und starten aktuelle Aktivität neu? – MoQ93

Antwort

0

verlassen Ich löste es schließlich. Das Problem lag in dem Thread, der die Methode myCallback aufruft. Ich habe den gleichen Thread wiederverwendet, es würde untätig bleiben, bis ich es intern wieder begonnen habe. Ich habe das behoben, indem ich den Thread in der Callback-Methode auf null gesetzt habe.

0

vor dem Verlassen FirstActivity jede Sicht zurückzukehren, wie es war

public class FirstActivity extends AppCompatActivity{ 

private LinearLayout buttonLayout; 
private Button btn; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    .. 
    buttonLayout = (LinearLayout) findViewById(R.id.buttonLayout); 
    btn = (Button) findViewById(R.id.btn); 
} 

@Override 
public void myCallback(int n){ 

    this.runOnUiThread(() -> { 
     buttonLayout.setVisibility(View.GONE); 
     btn.setVisibility(View.VISIBLE); 

    });  
} 

    public void onClick1(View view){ 
     Intent intent = new Intent(this, Result.class); 
     startActivity(intent); 
     finish(); 
    } 
} 

Das ist mein Layout ist Bedeutung ...

diese beiden Zeilen hinzufügen, bevor FirstActivity

btn.setVisibility(View.INVISIBLE); 
buttonLayout.setVisibility(View.VISIBLE); 
+0

Leider hat dies nicht funktioniert, das zweite Mal, zeigt es nicht die andere Taste –

Verwandte Themen