2011-09-26 47 views
2

我有一個webview作爲主要活動,我想刷新來自其他活動的「首選項」(列表視圖)的webview。有可能這樣做嗎?我不想在應用程序菜單上有「刷新」按鈕。從另一個listview活動執行webview動作

但我的活動會按我的首選項活動「刷新」後崩潰,我認爲是「R.id.web_engine」,這是從MainActivity佈局,導致崩潰(請看下面的代碼) 。

如何從外部活動執行webview操作?

例子:

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

       }); 

回答

1

我與拉胡爾·喬杜裏同意細節。您的網絡視圖只能從您的主要活動中看到。你必須傳遞一條消息,它應該在下一次可見時刷新。

此代碼的正確位置在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; 
         } 

       }); 
+0

@XDragonZ:我編輯了我的答案與一些代碼嘗試。 –

2

此行導致崩潰

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

如果我理解正確,它應該是空指針崩潰,因爲此首選項活動將永遠無法找到使用此方法的主要活動的WebView。做到這一點的更好方法是廣播意圖刷新並處理主要活動中的意圖並執行操作。

這裏看到廣播接收機 http://thinkandroid.wordpress.com/2010/02/02/custom-intents-and-broadcasting-with-receivers/

+0

謝謝你,但我不能得到它的工作... NVM – xDragonZ

+0

我仍然在Java中新,i'dont知道往哪裏放它;這裏有一些圖片:http://i.imgur.com/TT6g0.png http://i.imgur.com/E6TFr.png – xDragonZ

相關問題