在所有活动中使用公共布尔onKeyDown

问题描述 投票:1回答:1

我是Android Studio的新手,我创建了一个包含10个活动的简单应用程序。现在,我想在我的所有活动中拦截来自用户的KeyEvent.KEYCODE_BACK。

当KEYCODE_BACK时,我正在对话框。我的MainActivity可以,但是我不想在所有活动中都复制此代码。

有人有想法吗?

public class MainActivity extends AppCompatActivity
    {
        Dialog myDialog;
        Button BoutonAccepter;
        Button BoutonRefuser;

        @Override
        protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            }

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
            {
                myDialog = new Dialog(this);
                if (keyCode == KeyEvent.KEYCODE_BACK)
                    {
                        myDialog.setContentView(R.layout.popup);
                        BoutonAccepter = (Button) myDialog.findViewById(R.id.BoutonAccepter);
                        BoutonRefuser = (Button) myDialog.findViewById(R.id.BoutonRefuser);

                        BoutonAccepter.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View v)
                                {
                                    Toast.makeText(getApplicationContext(), "Non", Toast.LENGTH_LONG).show();
                                    myDialog.dismiss();
                                }
                            });

                        BoutonRefuser.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View v)
                                {
                                    Toast.makeText(getApplicationContext(), "Oui", Toast.LENGTH_LONG).show();
                                    myDialog.dismiss();
                                }
                            });
                        myDialog.show();
                    }
                else
                    {
                        return super.onKeyDown(keyCode, event);
                    }
                return true;
            }
    }
java android android-studio android-activity onkeydown
1个回答
1
投票

我认为您应该将此代码分成一个单独的抽象类,并为您的所有活动扩展该类

public abstract class BaseActivity extends AppCompatActivity
    {
        Dialog myDialog;
        Button BoutonAccepter;
        Button BoutonRefuser;

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
            {
                myDialog = new Dialog(this);
                if (keyCode == KeyEvent.KEYCODE_BACK)
                    {
                        myDialog.setContentView(R.layout.popup);
                        BoutonAccepter = (Button) myDialog.findViewById(R.id.BoutonAccepter);
                        BoutonRefuser = (Button) myDialog.findViewById(R.id.BoutonRefuser);

                        BoutonAccepter.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View v)
                                {
                                    Toast.makeText(getApplicationContext(), "Non", Toast.LENGTH_LONG).show();
                                    myDialog.dismiss();
                                }
                            });

                        BoutonRefuser.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View v)
                                {
                                    Toast.makeText(getApplicationContext(), "Oui", Toast.LENGTH_LONG).show();
                                    myDialog.dismiss();
                                }
                            });
                        myDialog.show();
                    }
                else
                    {
                        return super.onKeyDown(keyCode, event);
                    }
                return true;
            }
    }

以及在所有活动中

public class ActivityA extends BaseActivity {
}
© www.soinside.com 2019 - 2024. All rights reserved.