2

私はアンドロイドが初めてです。シンプルな Android アプリケーションを構築しようとしています: ユーザーがボタンをクリックすると、進行状況ダイアログが 5 秒間表示されます。ProgressDialog.show() を使用しましたが、context パラメーターに問題がありました。ここに私の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" >
    <Button
        android:id="@+id/btnDialog2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/btnDialog2" />
</LinearLayout>

そして、ここに私のコードがあります:

public class Dialog22Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnDialog2 = (Button)findViewById(R.id.btnDialog2);
        btnDialog2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                final ProgressDialog dialog = ProgressDialog.show(getBaseContext(), 
                        "Progress dialog", "Loading...", true);
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            Thread.sleep(5000);
                            dialog.dismiss();
                        } catch (InterruptedException e) {

                        }

                    }
                }).start();
            }           
        });
    }
}

ProgressDialog.show() のコンテキスト パラメータを getBaseContext() から v.getContext() に変更すると、プログラムは正常に実行されます。だから私はここでコンテキストパラメータの意味は何ですか? 助けてくれてありがとう。

4

7 に答える 7

1

このクラス内にいるときはいつでも、 getContext() または WhatEverContextFunction() の代わりに使用するだけDialog22Activity.thisで、クールになります:)

于 2012-10-18T12:32:10.477 に答える
0

現在のアクティビティで進行状況ダイアログを表示している場合は、コンテキストに classname.class または 'this' キーワードを使用します。

于 2016-09-23T18:36:24.637 に答える
0

これらの説明については、Android ドキュメントを参照してください。これを参照してください。

http://developer.android.com/reference/android/content/Context.html

于 2012-10-18T12:29:43.083 に答える
0

getContext() はアクティビティで定義されていません。ビュー (またはビューのサブクラス) で使用され、囲んでいるコンテキスト (アクティビティ) への参照を取得します。

于 2012-10-18T12:29:48.533 に答える
0
        import androidx.appcompat.app.AppCompatActivity;
        import android.app.ProgressDialog;
        import android.os.Bundle;
        import android.webkit.WebView;
        import android.view.View;
        import android.webkit.WebViewClient;
        import android.webkit.WebChromeClient;
        import android.webkit.WebSettings;
        import android.webkit.JsResult;
        import android.widget.Toast;


        public class MainActivity extends AppCompatActivity {


        private WebView webView;
        private ProgressDialog progressDialog;

        startWebView("http://.../mobile/");

        }

        private void startWebView(String url) {

        WebSettings settings = webView.getSettings();

        settings.setJavaScriptEnabled(true);
        webView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);

        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);

        progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Loading...");
        progressDialog.setMessage("Wait while loading...");
        progressDialog.setCancelable(false); // disable dismiss by tapping outside of the dialog
        progressDialog.show();

        webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
        if (progressDialog.isShowing()) {
        progressDialog.dismiss();
        }
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        Toast.makeText(getApplicationContext(), "Error:" + description, Toast.LENGTH_SHORT).show();

        }
        });

        webView.loadUrl(url);
        }
        }
于 2020-05-01T05:27:44.193 に答える
-1

その活動コンテキスト。使用する:

public class Dialog22Activity extends Activity {
    private Activity activity;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        activity = this;

        Button btnDialog2 = (Button)findViewById(R.id.btnDialog2);
        btnDialog2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                final ProgressDialog dialog = ProgressDialog.show(activity, 
                        "Progress dialog", "Loading...", true);
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            Thread.sleep(5000);
                            dialog.dismiss();
                        } catch (InterruptedException e) {

                        }

                    }
                }).start();
            }           
        });
    }
}

コンテキストに関する情報: Android の「コンテキスト」とは何ですか?

于 2012-10-18T12:29:11.213 に答える