gpt4 book ai didi

Android 删除延迟后的 xml 元素上的回调

转载 作者:行者123 更新时间:2023-11-30 00:53:10 25 4
gpt4 key购买 nike

我有如下代码:

myelement.postDelayed(new Runnable() { 
public void run() {
myelement.setVisibility(View.GONE);
} }, 8000);

我希望在每次发生 onStop() 或 onPause() 时删除回调。

我在其他 SO 文章中阅读了您可以执行的操作:

handler.removeCallbacks(null);
handler.removeCallbacksAndMessages(null);
handler.removeCallbacks(runnable);

当我尝试这样做时:

public synchronized void onPause() {        // on pause
myelement.removeCallbacks(null);
super.onPause();
}

并尝试在 Activity 之间来回切换。但是,当我尝试这样做时,该元素出现了故障,有时会显示该元素半秒,有时会显示一整秒,有时它会起作用。等

最佳答案

removeCallback() 方法采用可运行对象,因此您必须保留对它的引用。

例如:

public class DemoActivity extends AppCompatActivity {

private static final String TAG = "Demo";
private Handler mHandler;
private Runnable mRunnable;
private View mView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mView = findViewById(R.id.some_view);
mHandler = new Handler();
doSomethingInFiveSeconds();
}

void doSomethingInFiveSeconds() {
mRunnable = new Runnable() {
@Override
public void run() {
Log.d(TAG, "run: Post Delayed!");

if (mView != null) {
// Animate it…
mView.animate().alpha(0).setDuration(250);
// or just make it disappear
// mView.setVisibility(View.GONE);
}
}
};
mHandler.postDelayed(mRunnable, 5000);
}

@Override
protected void onStop() {
if (mRunnable != null) {
mHandler.removeCallbacks(mRunnable);
}

super.onStop();
}
}

此外,很难说出您的 View 在做什么,因为您并没有真正显示太多代码。如有疑问,请确保您的处理程序在主线程上循环(默认情况下);我不知道你的 myelement 是什么。

关于Android 删除延迟后的 xml 元素上的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40600535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com