1

Phonegap + Jquery モバイルを使用して Android アプリケーションに取り組んでおり、アプリの起動時にスプラッシュ画面が 1 つ表示されますが、それは静的な png ファイルです。現在、顧客はスプラッシュ画面のスピナーやプログレス バーなどの読み込みインジケーターを要求し続けています。ユーザーがアプリのロードを待っている間。

スプラッシュ画面に進行状況バーを表示するために 1 つの例に従いますが、それは機能しません。それは私のコードです。

メイン Java:

super.onCreate(savedInstanceState);

final Activity activity = this;
final ProgressBar progessBar1;
View footer = View.inflate(getContext(), R.layout.spinner, null);
root.addView(footer);

progessBar1 = (ProgressBar) findViewById(R.id.progressBar1);

this.appView.setWebChromeClient(new WebChromeClient() {

        public void onProgressChanged(WebView view, int progress) { 
            activity.setProgress(progress * 1000);
            if(progress < 100 && progessBar1.getVisibility() == ProgressBar.GONE) {
                progessBar1.setVisibility(ProgressBar.VISIBLE);
            }
            progessBar1.setProgress(progress);
            if(progress == 100) {
                progessBar1.setVisibility(ProgressBar.GONE);
            }

            Log.d("Progress", progress+"");

         }
    });

super.setIntegerProperty("splashscreen", R.drawable.splash);
super.setStringProperty("loadingDialog", "Wait, loading packages ...");


super.loadUrl("file:///android_asset/www/index.html", 12000);
super.setIntegerProperty("loadUrlTimeoutValue", 12000); 

res/layout の spinner.xml :

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:maxHeight="10dip"
        android:minHeight="10dip" />

</LinearLayout>

しかし、進行状況バーは表示されません。

私の質問:

  1. 誰でも私が間違っていた場所を指摘するのを助けることができます、ありがとう。

  2. これを行う他の方法は、実際には、スプラッシュ画面にスピナーを表示したいだけです。

4

3 に答える 3

1

スプラッシュ画像の背景が透明であることを確認してください。

スプラッシュスクリーンは、プログレスバーを後ろに隠して画面スペース全体を占有します。スプラッシュ画面にも表示されない進行状況バーを Bringtofront() しようとしました。

nullpointer例外をスローするコードを実行しようとしました

    this.appView.setWebChromeClient.....

この行ではappViewが null であるためです。

コードを次のように変更しました ((つまり、setwebchromeclient の前に URL をロードする) と、スプラッシュ スクリーンとプログレス バーが一緒に表示されます。

    super.onCreate(savedInstanceState);

    final Activity activity = this;
    final ProgressBar progessBar1;

    super.setIntegerProperty("splashscreen", R.drawable.splash);
    super.setStringProperty("loadingDialog", "Wait, loading packages ...");
    super.loadUrl("file:///android_asset/www/index.html", 20000);
    super.setIntegerProperty("loadUrlTimeoutValue", 20000);


    View footer = View.inflate(getContext(), R.layout.testspinner, null);
    root.addView(footer);

    progessBar1 = (ProgressBar) findViewById(R.id.progressBar11);

    this.appView.setWebChromeClient(new WebChromeClient() {

        public void onProgressChanged(WebView view, int progress) {
            activity.setProgress(progress * 1000);
            if (progress < 100
                    && progessBar1.getVisibility() == ProgressBar.GONE) {
                progessBar1.setVisibility(ProgressBar.VISIBLE);
            }
            progessBar1.setProgress(progress);
            if (progress == 100) {
                progessBar1.setVisibility(ProgressBar.GONE);
            }

            Log.d("Progress", progress + "");

        }
    });

ここに画像の説明を入力

于 2013-06-11T07:10:31.530 に答える
0

これも思い通りにはいかないと思います。ある時点で同じ ProgressBar ウィジェットを追加しましたが、ブラウザーで Web ページを見ているときに OS ブラウザーに表示されるのは、少なくとも私の droid3 では同じ (醜い) 読み込みバーでした。これは、「ネイティブ」なルック アンド フィールには適していません。

于 2013-06-13T20:12:23.357 に答える
0

はい、コードのプログレスバーのIDがレイアウトファイルのIDと一致しないため、nullpointer例外が発生しています。

次の行

com.accoladewios.apps.jetabout.MainActivity$1.onProgressChanged(MainActivity.java:42)

ヌルポインタ例外の42行目を示します。

Splash.xmlのプログレス バー IDはprogressBar1です。一方、コードの次の行では、progressbar1を使用しています

progessBar1 = (ProgressBar) findViewById(R.id.progressbar1 );

コードをデバッグすると、上記の行を実行した後に変数progessBar1が null になります。

これを修正すると、スプラッシュ スクリーンにプログレス バーが表示されるはずです。

于 2013-06-18T19:24:28.440 に答える