簡體   English   中英

setVisibility(int)在回調中第二次不起作用

[英]setVisibility(int) not working second time in a callback

我知道以前有人問過類似的問題,但是我找不到解決我問題的線程。 我有兩個重疊的元素(布局和按鈕),我通過回調方法更改其可見性。 奇怪的是,它第一次起作用,但是如果我第二次嘗試它就不起作用。 當我單擊布局中的按鈕時,布局設置為View.GONE ,另一個按鈕btn設置為View.VISIBLE 當我單擊btn按鈕時,會啟動另一個 Activity,然后從該活動中再次啟動該 Activity。 那是無法再次切換可見性的時候,但是當我重新啟動整個應用程序時,它會第一次工作。 我還使用了 Handler 而不是runOnUiThread(..) ,但它仍然無法正常工作。 我還檢查了可見性的狀態,統計數據是可見的,但它仍然沒有顯示。

這是我的代碼:

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();
   }
}

這是我的布局:

<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"
     />

這是下一個活動:

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"));
    }
}

在離開 FirstActivity 之前返回所有可見性,因為它的意思......

在離開 FirstActivity 之前添加這兩行

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

我終於解決了。 問題在於調用myCallback方法的線程。 我正在重用同一個線程,它會保持空閑狀態,直到我再次在內部啟動它。 我通過在回調方法中將線程設置為 null 來解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM