gpt4 book ai didi

java - 当多次点击 Activity 导航点击时,为什么第二个 Activity 生命周期方法调用两次

转载 作者:行者123 更新时间:2023-12-02 03:41:26 26 4
gpt4 key购买 nike

当我多次点击 Activity 传递按钮时,activity1 已处于暂停状态,几秒钟后 activity2 已进入前台/对用户可见状态。

我的问题是,当我们通过多次点击来移动 Activity 时,用户需要几秒钟的时间才能等待下一个 Activity 进入可见状态。这确实是一个不好的做法。

以下是 actity 生命周期方法的调用日志:

calling pause - Activity1

call: calling noti create - Activity2
call: calling noti start - Activity2
call: calling noti resume- Activity2
call: calling noti pause- Activity2
//2nd time calls of lifecycle methods
calling noti create- Activity2
call: calling noti start- Activity2
call: calling noti resume- Activity2

这是 Activity 导航的按钮单击:

@OnClick({R.id.card_notification})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.card_notification:
startActivity(new Intent(context, NotificationsActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

break;
}
}

如果我删除 setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),则当多次点击按钮时 activity2 会打开多次。

我尝试在 list 文件中设置启动模式。

<activity android:launchMode=”singleTop” />

在这种情况下, Activity 2 也需要几毫秒才能进入可见状态。

注意:单击/单击时一切正常。

请帮助我,这个场景出了什么问题。

这里是第二个 Activity 代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_noti_detail);
Log.e("call", "noti create");

context = this;
ButterKnife.bind(this);
setToolbar();
callApi("");
etSearchh.setOnEditorActionListener((v, actionId, event) ->
{
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
isSearch = true;
//membersList = null;
callApi(etSearchh.getText().toString().trim());
CommonUtils.hideKeyboard(this);
return true;
}
return false;
});

etSearchh.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().length() > 0) {
iv_clearSearch.setVisibility(View.VISIBLE);
} else {
iv_clearSearch.setVisibility(View.INVISIBLE);
}
}

@Override
public void afterTextChanged(Editable s) {

}
});
iv_clearSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
iv_clearSearch.setVisibility(View.GONE);
etSearchh.setText("");
//membersList = null;
callApi("");
}
});

}

private void callApi(String searchBy) {
new NotificationController(apiCallBack, context, searchBy).callTokenAPI();
}

private void setToolbar() {
toolbarTitle.setText(MyApplication.getLabelModel().getLabels().getTT_NOTIFICATIONS());
etSearchh.setHint(MyApplication.getLabelModel().getLabels().getSEARCH_NOTIFICATION());
}

private void setRecycler(List<Notifications> notifications) {
mAdapter = new NotificationAdapter(notifications, context);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
}

@OnClick(R.id.iv_back)
public void onViewClicked() {
onBackPressed();
}

@Override
protected void onStart() {
Log.e("Call", "calling noti start");
super.onStart();
}

@Override
protected void onResume() {
Log.e("Call", "calling noti resume");
super.onResume();
}

@Override
protected void onStop() {
Log.e("Call", "calling noti stop");
super.onStop();
}

@Override
protected void onPause() {
Log.e("Call", "calling noti pause");
super.onPause();
}

最佳答案

为了防止多次执行按钮按下操作,您需要添加一个 boolean 变量,用于记住按钮已被单击,并在再次看到按钮单击时将其视为“噪音”忽略。使用您的示例,执行以下操作:

向您的类添加一个 boolean 成员变量:

private boolean buttonClicked;

onViewClicked() 方法中,设置变量 buttonClicked 并忽略点击(如果已设置):

public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.card_notification:
// Ignore if already clicked
if (buttonClicked) {
return;
}
startActivity(new Intent(context, NotificationsActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
// Remember that the button was clicked
buttonClicked = true;
break;
}

这将防止多次点击启动 NotificationsActivity 的多个副本。当用户返回到此Activity时,您需要在onResume()中重置buttonClicked,以便用户可以再次单击该按钮(否则用户只能单击该按钮一次!)。

关于java - 当多次点击 Activity 导航点击时,为什么第二个 Activity 生命周期方法调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56833950/

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