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

时间:2017-04-09 08:48:38

标签: android callback toggle visibility

我之前已经问过类似的问题,但我找不到解决问题的线程。 我有两个重叠元素(布局和按钮),我通过回调方法更改可见性。奇怪的是,它第一次起作用,但如果我第二次尝试它就不起作用。当我单击布局中的按钮时,布局设置为View.GONE,另一个按钮btn设置为View.VISIBLE。当我单击btn按钮时,将启动另一个活动,并从该活动再次启动此活动。当无法再次切换可见性时,但是当我重新启动整个应用程序时,它第一次工作。 我还使用了Handler而不是runOnUiThread(..),它仍然无效。 我还检查了可见性的状态,stat是可见的,但它仍然没有显示。

这是我的代码:

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

2 个答案:

答案 0 :(得分:0)

离开FirstActivity之前

返回每个可见性,因为它意味着......

在离开FirstActivity之前添加这两行

{{1}}

答案 1 :(得分:0)

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