2012-03-21 2 views
0

EDIT: Я использую ProgressBar для Webview, который отлично работает. Теперь я хочу обновить свой Webview, который также работает. Когда я пытаюсь их объединить, Spinner не заканчивается вообще. Это мой код:progressBar и обновить комбинацию веб-просмотра android

private final Runnable m_Runnable = new Runnable() 
    { 
     public void run() 

     { 
      //Toast.makeText(WebcamsScreen.this,"in runnable",Toast.LENGTH_SHORT).show(); 
      doRefreshingStuff(id); 
      WebcamsScreen.this.mHandler.postDelayed(m_Runnable, 20000);    
     } 

    }; 



    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
      //initialitions 

     doRefreshingStuff(id); 
     this.mHandler = new Handler(); 

     this.mHandler.postDelayed(m_Runnable,20000); 

     doRefreshingStuff(id); 
    } 
public void doRefreshingStuff(String id){ 

       setContentView(R.layout.web4); 

       webView7 = (WebView) findViewById(R.id.web_4_1); 

       webView7.getSettings().setJavaScriptEnabled(true); 
       webView7.getSettings().setJavaScriptEnabled(true); 
       progressBar = ProgressDialog.show(WebcamsScreen.this, "example", "..."); 
       url="my url"; 
webView7.setWebViewClient(new WebViewClient() { 
       public boolean shouldOverrideUrlLoading(WebView view, String url1) {    
        view.loadUrl(url1); 
        return true; 
       } 


       public void onPageFinished(WebView view, String url1) { 
        if (progressBar.isShowing()) { 
         progressBar.dismiss(); 
        } 
       } 
      }); 
       webView7.loadUrl(url); 

Что я должен изменить?

+0

Почему вы хотите снова и снова вызвать WithCreate? – MByD

+1

Вы не хотите запускать 'onCreate' самостоятельно. Что вы на самом деле пытаетесь достичь? –

+0

Я установил progressBar для веб-просмотра. и с приведенным выше кодом он не работает. Я отредактирую сообщение в мин. –

ответ

1

Похоже, вы обновляете свой WebView каждые 20 секунд и вы открываете новый диалог прогресса. В вашем коде предполагается, что старый диалог прогресса уже уволен. Если это не так, то диалог прогресса просто стал сиротой и останется навсегда. Вы, наверное, это можно исправить, вставив этот код:

if (progressBar != null && progressBar.isShowing()) { 
    progressBar.dismiss(); 
} 

непосредственно перед линией progressBar = ....

Но я бы не исправил ваш код таким образом. Вы выполняете огромную работу, которую вам не нужно делать. (К примеру, вам не нужно перезагружать тот же вид контента.) Вот моя пересмотренная версия:

private final Runnable m_Runnable = new Runnable() { 
    public void run() { 
     doRefreshingStuff(id); 
     mHandler.postDelayed(m_Runnable, 20000); 
    } 
}; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     //initialitions 

    setContentView(R.layout.web4); 
    webView7 = (WebView) findViewById(R.id.web_4_1); 
    webView7.getSettings().setJavaScriptEnabled(true); 
    webView7.getSettings().setJavaScriptEnabled(true); 
    webView7.setWebViewClient(new WebViewClient() { 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      if (!mProgressBar.isShowing()) { 
       mProgressBar.show(); 
      } 
     } 
     public void onPageFinished(WebView view, String url1) { 
      if (mProgressBar.isShowing()) { 
       mProgressBar.dismiss(); 
      } 
     } 
    }); 

    mProgressBar = new ProgressDialog(this); 
    mProgressBar.setTitle("example"); 
    mProgressBar.setMessage("..."); 

    mHandler = new Handler(); 
} 

protected void onResume() { 
    super.onResume(); 
    mHandler.post(m_Runnable); 
} 

protected void onPause() { 
    super.onPause(); 
    mHandler.removeCallbacks(m_Runnable); 
} 

public void doRefreshingStuff(String id) { 
    url="my url"; 
    webView7.loadUrl(url); 
} 

Обратите внимание, что я перенес запуск цикла загрузки страницы в onResume() и убить зацикливание в onPause(). Возможно, вам понадобится немного другая логика, но вы обязательно должны прекратить цикл, как только ваша деятельность приостанавливается или заканчивается.

+0

Спасибо, я попробую. Я получаю эту ошибку: вызвано: android.app.SuperNotCalledException: активность не вызывала super.onResume(). Если ты поможешь мне, ты станешь моим героем. –

+0

Я также получаю это: java.lang.RuntimeException: Не удалось возобновить активность android.app.SuperNotCalledException: <...> Активность не набрала <...> super.onResume() –

+0

@qwerty_gr - Извините. Я не обращался к 'super' в' onPause() 'и' onResume() '. Я обновил код, чтобы показать, что нужно сделать. –