Выполнить действие веб-просмотра из другого действия списка - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть веб-просмотр в качестве основного действия, и я хочу обновить веб-просмотр из «Предпочтения» (списка), который является другим действием.Возможно ли это сделать?Я не хочу, чтобы в меню приложений была кнопка «обновить».

Но активность завершится сбоем после того, как я нажму «обновить» в своем предпочтении, я предполагаю, что это «R.id.web_engine», то есть из макета MainActivity, который вызывает сбой (посмотрите код ниже).

Как я могу выполнить действие веб-просмотра из внешнего действия?

Пример:

В моем MainActivity будет иметь

        //Webview
        final WebView engine = (WebView) findViewById(R.id.web_engine);
        engine.loadUrl("file:///android_asset/www/index.html");
        engine.getSettings().setJavaScriptEnabled(true);

и Предпочтения

//Get the custom preference
Preference refreshPref = (Preference) findPreference("refreshPref");
refreshPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {

             public boolean onPreferenceClick(Preference preference) {

         Toast.makeText(getBaseContext(),
         "Loading...",Toast.LENGTH_SHORT).show();
         WebView engine = (WebView) findViewById(R.id.web_engine);
         engine.loadUrl("javascript:window.location.reload();");

         return true;
                      }

              });

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Эта строка вызывает сбой

WebView engine = (WebView) findViewById(R.id.web_engine);
engine.loadUrl("javascript:window.location.reload();");

Это должно быть сбой нулевого указателя, если я правильно понимаю, так как это действие Preference никогда не сможет найти WebView, который является основным действием с использованием этого метода.Лучший способ сделать это - передать намерение обновить и обработать это намерение в основной деятельности и выполнить действие.

Подробнее о приемниках вещания см. Здесь http://thinkandroid.wordpress.com/2010/02/02/custom-intents-and-broadcasting-with-receivers/

1 голос
/ 26 сентября 2011

Я согласен с Рахулом Чоудхари. Ваш веб-просмотр виден только из вашей основной деятельности. Вы должны передать ему сообщение, которое должно быть обновлено в следующий раз, когда оно станет видимым.

Правильное место для этого кода - основной метод onResume (). Вы можете использовать намерения, чтобы запустить его снова (он будет воссоздан и потеряет свою историю) или использовать SharedPreferences, которые доступны обоим действиям.

РЕДАКТИРОВАТЬ: добавлен код ниже.

MainActivity

//onCreate
final WebView engine = (WebView) findViewById(R.id.web_engine);
engine.loadUrl("file:///android_asset/www/index.html");
engine.getSettings().setJavaScriptEnabled(true);

//onResume
boolean refresh = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("SHOULD_REFRESH", false)
if (refresh) {
  engine.loadUrl("javascript:window.location.reload();");
  //remove the shared preference here or set it to false to prevent reloading next time
}

и Предпочтения

//Get the custom preference
Preference refreshPref = (Preference) findPreference("refreshPref");
refreshPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {
               PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("SHOULD_REFRESH", true).commit();             
               return true;
                      }

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