Используйте publi c boolean onKeyDown во всех действиях - PullRequest
1 голос
/ 11 апреля 2020

Я новичок в Android Studio, и я создал простое приложение с 10 действиями. Теперь я хочу перехватывать KeyEvent.KEYCODE_BACK от пользователя во всех моих действиях.

Я выступаю против диалога, когда KEYCODE_BACK. Это нормально в моей основной деятельности, но я не хочу копировать этот код во всех моих действиях.

У кого-нибудь есть идея?

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;
            }
    }

1 Ответ

1 голос
/ 11 апреля 2020

Я думаю, что вы должны разделить этот код на отдельный абстрактный класс и расширить его для всех ваших действий

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 {
}
...