5

नहीं दिखा रहा है मेरे पास वेब व्यू है और मैं चाहता हूं कि पेज वेबव्यू में लोड हो रहा है, एक्शनबार शो प्रगति में। एप्लिकेशन ऐपकॉमपेट एंड्रॉइड लाइब्रेरी का उपयोग कर रहा है और ऐप का लक्ष्य और संकलन एसडीके संस्करण 21 है। बस वेबव्यू सामान्य रूप से चल रहा है।एक्शनबार प्रगति पट्टी

मुझे लगता है कि विधि setSupportProgress(int progress) में समस्या है।

मेरा कोड नीचे है।

गतिविधि:

public class AuthActivity extends ActionBarActivity { 

private boolean isConfirmationRequired = false; 
private Utils utils = new Utils(); 

@SuppressLint("SetJavaScriptEnabled") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    supportRequestWindowFeature(Window.FEATURE_PROGRESS); 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_auth); 

    final String authUrl = "some url"; 
    final WebView authWebView = (WebView) findViewById(R.id.auth_web_view); 
    authWebView.getSettings().setJavaScriptEnabled(true); 
    authWebView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public void onProgressChanged(WebView view, int newProgress) { 
      setTitle(R.string.loading); 
      setSupportProgress(newProgress * 100); 

      if (newProgress == 100) 
       setTitle(R.string.sign_in); 
     } 
    }); 

    authWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      if (!url.equals(authUrl)) 
       isConfirmationRequired = true; 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView webView, String url) { 
      boolean hasUserBrokenAuth = url.equals("some url") || 
        url.equals("some url"); 
      boolean isUserAuthorized = url.startsWith("some url" + 
        "access_token="); 

      if (hasUserBrokenAuth) { 
       if (isConfirmationRequired) 
        utils.showConfirmDialog(AuthActivity.this); 
       else 
        finish(); 
      } else { 
       utils.webViewLoadUrlIfInternetIsConnected(AuthActivity.this, authWebView, url); 
       if (isUserAuthorized) 
        saveAuthData(url); 
      } 
      return true; 
     } 
    }); 

    utils.webViewLoadUrlIfInternetIsConnected(this, authWebView, authUrl); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     if (isConfirmationRequired) { 
      utils.showConfirmDialog(this); 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    if (isConfirmationRequired) { 
     utils.showConfirmDialog(this); 
     return true; 
    } else { 
     return super.onOptionsItemSelected(item); 
    } 

} 

private void saveAuthData(String url) { 
    String accessToken = utils.extractPattern(url, "access_token=(.*?)&"); 
    String userId = utils.extractPattern(url, "user_id=(\\d*)"); 
} 

utils.webViewLoadUrlIfInternetIsConnected:

public void webViewLoadUrlIfInternetIsConnected(final Context context, final WebView webView, 
               final String url) { 
    if (isInternetConnected(context)) { 
     webView.loadUrl(url); 
    } else { 
     showSnackbarInternetDisconnected(context, new ActionClickListener() { 
      @Override 
      public void onActionClicked(Snackbar snackbar) { 
       snackbar.dismiss(); 
       webViewLoadUrlIfInternetIsConnected(context, webView, url); 
      } 
     }); 
    } 
} 

उत्तर

3

AppCompat एक प्रगति दृश्य दिखा के रूप में यह संभव हो गया था का समर्थन नहीं करता है, तो आप अपने कोड से निम्नलिखित निकाल सकते हैं:

supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
setSupportProgressBarIndeterminateVisibility(...); 

, संभावना बजाय नए उपकरण पट्टी का उपयोग करने के भी नहीं है मैं आज अपने आप से कोशिश की, लेकिन यह सब जटिल है।

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" > 

<item 
    android:id="@+id/menu_progress" 
    android:visible="false" 
    app:showAsAction="always" 
    app:actionLayout="@layout/progress_indeterminate" 
    tools:ignore="AlwaysShowAction,UnusedAttribute"/> 

तब लेआउट की तरह दिखता है: समाधान मैं के साथ समाप्त हुआ एक लेआउट एक drawbale का संदर्भ जो संदर्भ देता है एक मेनू आइटम और अधिक स्थापित करने के लिए था

<?xml version="1.0" encoding="utf-8"?> 
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar_progress_bar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminateDrawable="@drawable/custom_progress_wheel" /> 

और इस प्रकार drawable (आप अनुकूलित कर सकते हैं इस रूप में आप चाहते):

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toDegrees="720" > 

<shape 
    android:innerRadiusRatio="3" 
    android:shape="ring" 
    android:thicknessRatio="12" 
    android:useLevel="false" > 

    <gradient 
     android:centerColor="#FFFFFF" 
     android:centerY="0.50" 
     android:endColor="#FFFFFF" 
     android:startColor="#000000" 
     android:type="sweep" 
     android:useLevel="false" /> 
</shape> 
</rotate> 

फिर onCreateOptionsMenu में आप MENUITEM निम्नलिखित के साथ प्रारंभ:

mProgressMenu = menu.findItem(R.id.menu_progress); 

और सेट दृश्यता के साथ आप अपनी गतिविधि में कहीं भी मेनू की दृश्यता का पीछा कर सकते हैं।

+1

एक अच्छा समाधान, धन्यवाद। कस्टम ड्रायरेबल के बजाय, मैंने प्रोग्रेसबार लेआउट में स्टाइल = "? एंड्रॉइड: एटीआर/एंड्रॉइड: प्रोग्रेसबार स्टाइलस्माल" जोड़ा। – Yar

+0

मुझे पता है, लेकिन मैंने स्पष्ट रूप से कस्टम एंड्रॉइड संस्करण पर एक ही होने के लिए कस्टम ड्रॉइंग का उपयोग किया। – David

0

आप इस प्रकार setSupportProgressBarVisibility(boolean) साथ ProgressBar की Visibility अद्यतन करने के लिए प्रयास करना चाहिए: onProgressChanged में,

// set Visibility to TRUE 
setSupportProgressBarVisibility(true); 

और फिर , डी isable अपने Visibility जब प्रगति समाप्त होता है:

@Override 
public void onProgressChanged(WebView view, int newProgress) { 
    setTitle(R.string.loading); 
    setSupportProgress(newProgress * 100); 

    if (newProgress == 100) { 
     // set it to FALSE 
     setSupportProgressBarVisibility(false); 
     setTitle(R.string.sign_in); 
    } 
    //... 
} 

अद्यतन:

एक अन्य समाधान एक कस्टम Progress ViewAppCompat को जोड़ा गया उपयोग करने के लिए हो सकता है।

आप करने के लिए है बढ़ जो एक क्षैतिज ProgressBar शामिल कस्टम दृश्य, ActionBar कंटेनर ViewGroup और कंटेनर के लिए कस्टम दृश्य जोड़ने के लिए लिंक:

/** Inflate a custom view **/ 
View ab_progressView = getLayoutInflater().inflate(R.layout.ab_progressbar, null) 
/** Get the ActionBar container **/ 
ViewGroup ab_container = (ViewGroup) findViewById(R.id.action_bar_container); 
/** Add the custom view **/ 
ab_container.addView(ab_progressView); 

तो ab_containerNullPointerException देता है, आपको एक समानांतर धागे में अपनी आईडी प्राप्त करने के लिए बस एक नया Runnable बनाना होगा।

/** Get the progress bar **/ 
final ProgressBar progressBar = (ProgressBar) ab_progressView.findViewById(R.id.progress); 

@Override 
public void onProgressChanged(WebView view, int newProgress) { 
    /** Update the progress **/ 
    progressBar.setProgress(newProgress * 100); 
} 

है, प्रगति समाप्त हो जाती है, बस कस्टम दृश्य को हटा दें:

/** Create layout parameters **/ 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
/** Set the gravity **/ 
params.gravity = Gravity.BOTTOM; 
/** Set these params to your view **/ 
ab_progressView.setLayoutParams(params); 

फिर प्रगति अपडेट:

आप ActionBar के तल पर इस नए दृश्य सेट करने के लिए:

/** Remove the custom view added **/ 
ab_container.removeView(ab_progressView); 

मैंने इस समाधान का परीक्षण नहीं किया, लेकिन मैं टी काम करना चाहिए ..

+0

दुर्भाग्य से, यह मेरी मदद नहीं करता था। क्या कोई अन्य समाधान है? –

संबंधित मुद्दे