setVisibility(int) 在回调中第二次不工作

setVisibility(int) not working second time in a callback

我知道以前有人问过类似的问题,但是我找不到解决我问题的讨论帖。 我有两个重叠的元素(布局和按钮),我通过回调方法更改其可见性。奇怪的是,它第一次有效,但是如果我第二次尝试它就不起作用了。当我单击布局中的按钮时,布局设置为 View.GONE,而另一个按钮 btn 设置为 View.VISIBLE。当我单击 btn 按钮时,另一个 Activity 被启动,并且从那个 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"
     />

这是下一个Activity:

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 之前 return 每个可见性都意味着...

在离开 FirstActivity 之前添加这两行

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

我终于解决了。问题在于调用 myCallback 方法的线程。我正在重用同一个线程,它会保持空闲状态,直到我再次在内部启动它。我通过在回调方法中将线程设置为 null 来解决这个问题。