gpt4 book ai didi

android - View.OnKeyListener 为我的 Activity 工作过一次,不再工作

转载 作者:行者123 更新时间:2023-11-29 16:13:34 25 4
gpt4 key购买 nike

我有一个实现了 View.OnKeyListener 的 Activity,以便它可以在用户点击后退按钮时捕捉并弹出一个对话框。以前,它工作得很好。然而,最近它停止工作了,应用程序会假装没有 onKey 方法来捕获后退按钮。我似乎无法弄清楚为什么,因为自从我进行更改后我几乎没有触及 onKey 方法。我尝试只使用 OnBackPressed() 代替,但这并没有解决任何问题,而且实际上造成了奇怪且不可预测的行为。谁能帮我弄清楚为什么我的应用似乎让系统控制了后退按钮?

以下是我实现的重要部分:

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuInflater;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.KeyEvent;
import android.view.View;

public class NagTasksAddTasksActivity extends SherlockFragmentActivity implements View.OnKeyListener {
//various parameters
public void onCreate(Bundle savedInstanceBundle)
{
super.onCreate(savedInstanceBundle);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String setTheme = prefs.getString("themeselect", "Dark Overflow");
if (setTheme.toLowerCase().contentEquals("dark overflow")){
setTheme(R.style.Theme_Sherlock_ForceOverflow);
} else if (setTheme.toLowerCase().contentEquals("light overflow")){
setTheme(R.style.Theme_Sherlock_Light_ForceOverflow);
isDarkThemeUsed = false;
} else if (setTheme.toLowerCase().contentEquals("dark menu")){
setTheme(R.style.Theme_Sherlock);
} else if (setTheme.toLowerCase().contentEquals("light menu")){
setTheme(R.style.Theme_Sherlock_Light);
isDarkThemeUsed = false;
}
setContentView(R.layout.createtasklayout);
ActionBar actionBar = getSupportActionBar();
setTitle(R.string.newTask);

}
...
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setTitle(R.string.wait);
builder.setMessage(R.string.confirmbackkey);
builder.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
//stuff
dialog.dismiss();
}
});
builder.setNegativeButton(R.string.discard, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
AlertDialog.Builder subBuilder = new AlertDialog.Builder(getParent());
subBuilder.setCancelable(true);
subBuilder.setTitle(R.string.wait);
subBuilder.setMessage(R.string.confirmdiscard);
subBuilder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
//more stuff
dialog.dismiss();
}
});
subBuilder.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
dialog.dismiss();
subBuilder.create().show();
}
});
builder.setNeutralButton(R.string.cancel, new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.create().show();
return true;
}
return false;
}
}

最佳答案

捕获后退按钮的另一种方法是在 Activity 中使用 dispatchKeyEvent 方法(您不需要实现 View.OnKeyListener)。这似乎每次都对我有用。

public class HomeActivity extends Activity
{
...

@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
int action = event.getAction();
int keyCode = event.getKeyCode();
switch (keyCode)
{
case KeyEvent.KEYCODE_BACK:
if (action == KeyEvent.ACTION_DOWN)
{
Log.v("myApp", "Back button pressed.");
return true;
}
default:
return false;
}
return false;
}
}

关于android - View.OnKeyListener 为我的 Activity 工作过一次,不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216793/

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