Настройка класса Android Webview - PullRequest
2 голосов
/ 16 февраля 2012

Я пишу приложение для Android (Android 2.3.3 / API 10), в котором я загружаю веб-сайты через WebView. Глядя на исходный код android.webkit.webview, в частности onSavePassword (...) (вы можете найти его ЗДЕСЬ ), я хотел бы запустить свой собственный AlertDialog вместо стандартного и применить мои изменения, или мне нужно отредактировать исходный код android.webkit.webview и перекомпилировать android.jar?

Я должен был объяснить ранее, что пытался что-то подобное безуспешно:

class MyWebView extends WebView { 
    public MyWebView(Context context) {
        super(context);

    }
@Override
    boolean onSavePassword(String schemePlusHost, String username, String password, final Message resumeMsg) {
        boolean rVal = false;
           if (resumeMsg == null) {
               // null resumeMsg implies saving password silently

           } else {
                final Message remember = mPrivateHandler.obtainMessage(REMEMBER_PASSWORD);
                remember.getData().putString("host", schemePlusHost);
                remember.getData().putString("username", username);
                remember.getData().putString("password", password);
                remember.obj = resumeMsg;

                final Message neverRemember = mPrivateHandler.obtainMessage(NEVER_REMEMBER_PASSWORD);
                neverRemember.getData().putString("host", schemePlusHost);
                neverRemember.getData().putString("username", username);
                neverRemember.getData().putString("password", password);
                neverRemember.obj = resumeMsg;

                new AlertDialog.Builder(getContext())
                        .setTitle("My Custom Title")
                        .setMessage("My Custom Save/Don't Save Dialog Message")
                        .setPositiveButton(com.android.internal.R.string.save_password_notnow,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                resumeMsg.sendToTarget();
                            }
                        })
                        .setNeutralButton(com.android.internal.R.string.save_password_remember,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                remember.sendToTarget();
                            }
                        })
                        .setNegativeButton(com.android.internal.R.string.save_password_never,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                neverRemember.sendToTarget();
                            }
                        })
                        .setOnCancelListener(new OnCancelListener() {
                            public void onCancel(DialogInterface dialog) {
                                resumeMsg.sendToTarget();
                            }
                        }).show();
                // Return true so that WebViewCore will pause while the dialog is
                // up.
                rVal = true;
            }
           return rVal;
    }

Eclipse просто заявляет: «Метод onSavePassword (String, String, String, Message) типа MainActivity.MyWebView должен переопределить метод суперкласса» и говорит мне удалить @Override. И измененный диалог не берет.

Еще раз спасибо

EDIT

Метод, который я хочу изменить, т.е. onSavePassword (...) в андроиде webview.class не имеет модификатора, связанного с ним. Я думаю, это означает, что этот метод доступен только для классов, которые находятся в одном пакете. Как я уже упоминал ранее, я пытаюсь создать свой собственный класс webview, который расширяет класс stock, но он не находит onSavePassword. Любые идеи или примеры других расширений класса webView, которые могут указать мне правильное направление?

Ответы [ 4 ]

4 голосов
/ 16 февраля 2012

После того, как вы расширили класс WebView своим собственным, вы должны просто переименовать все веб-просмотры в ваших XML-файлах Layout на com.packagename.YourNewWebViewClass.

, фактически:стать

<com.mypackage.MyWebView layout....></com.mypackage.MyWebView layout>

Это должно сработать!

0 голосов
/ 23 августа 2012

почему бы вам не создать такой же пакет, как WebView, в своем коде и поместить свой класс в этот пакет.во время выполнения он будет считаться в том же пакете, и вы сможете использовать аннотацию @override

0 голосов
/ 16 февраля 2012

Почему бы просто не создать свой собственный класс WebViewExt, который расширяет WebView, и переопределить функцию? Тогда используйте свой собственный WebViewExt и забудьте, что WebView существует.

0 голосов
/ 16 февраля 2012

Просто переопределите.

Но вы должны принять стратегию цикла try-test-error, это хороший способ учиться в IT ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...