当我多次点击活动通过按钮时,activity1
处于暂停状态,几秒钟后activity2
进入前台/用户状态可见。
我的问题是,当我们进行多次轻击时,用户需要等待几秒钟的时间才能等待下一个活动进入可见状态。这确实是一个坏习惯。
这是规则生命周期方法的调用日志:
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
这是活动导航的按钮单击:
@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
会打开多次。
我在清单文件中尝试了设置启动模式。
<activity android:launchMode=”singleTop” />
在这种情况下,activity 2
也需要花费几毫秒的时间才能变为可见状态。
注意:单击或单击时,一切正常。
请帮助我,在这种情况下出了什么问题。
第2个活动代码:
@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();
}
答案 0 :(得分:0)
为防止多次执行按钮按下操作,您需要添加一个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
时,您需要在buttonClicked
中重设onResume()
,以便用户可以再次单击该按钮(否则,该用户只能单击一次按钮!)。