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