не могу передать параметры конструктору - PullRequest
0 голосов
/ 27 марта 2012

У меня есть CustomWebViewClass:

import android.app.Activity;
import android.content.Intent;

import android.os.Bundle;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class CustomWebView extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        String url = intent.getStringExtra("url");

        WebView webview = new WebView(this);
        setContentView(webview);
        webview.getSettings().setJavaScriptEnabled(true);

        //progress bar optional
        getWindow().requestFeature(Window.FEATURE_PROGRESS);

        final Activity activity = this;
        Toast.makeText(activity, "YO! " + url, Toast.LENGTH_SHORT).show();
        webview.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                // Activities and WebViews measure progress with different scales.
                // The progress meter will automatically disappear when we reach 100%
                activity.setProgress(progress * 1000);
            }
        });
        webview.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
            }
        });

        webview.loadUrl(url);
    }
}

из другого класса (по сути, кнопка). Я пытаюсь вызвать этот класс как намерение, передав ему URL-адрес примерно так:

Intent webView = new Intent(getContext(), CustomWebView.class);
webView.putExtra("url", "http://google.com");
webView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(webView);

но я получаю черный экран или ошибку .. очевидно, я делаю что-то не так, пожалуйста, помогите

о, и мой манифест имеет это:

<activity android:name=".CustomWebView"
    android:label="CustomWebView"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    android:screenOrientation="landscape">
    <intent-filter>
        <action android:name="com.sapientnitro.lcinstore2.CUSTOMWEBVIEW" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Ответы [ 4 ]

1 голос
/ 19 апреля 2012

requestFeature() следует вызывать до setContentView:

...

this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(webview);

...

0 голосов
/ 27 марта 2012

Вы не вызываете его с параметром, вы запускаете действие и помещаете дополнительную строку в комплект намерений, который вы никогда не извлекаете из комплекта для использования.

Вам нужно что-то подобное в начале CustomWebView:

Bundle extras = getIntent().getExtras();
String url = extras.getString("url");
0 голосов
/ 27 марта 2012

Вы, похоже, неправильно поняли разницу между конструктором Activity и его onCreate() методом.

Конструктор вызывается при явном создании нового объекта;

Activity customWebView = new CustomWebView(url);

Вероятно, это не то, как вы хотите создавать новые действия. Вместо этого вы хотите использовать систему намерений (что вы и начали делать).

Intent webView = new Intent(getContext(), CustomWebView.class);
webView.putExtra("url", "http://google.com");
webView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(webView);

Использование системы намерений вызовет пустой конструктор, а затем после создания Activity вызовет метод onCreate(), который необходимо переопределить. Отсюда у вас есть доступ к Intent, который вы использовали для запуска Activity, и вы можете получить URL, который вы передаете в качестве аргумента.

Вы, вероятно, хотите что-то похожее на это:

public class CustomWebView extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        String url = intent.getStringExtra("url");

        //Do stuff with your URL
    }
}
0 голосов
/ 27 марта 2012

Когда вы передаете params на Intent, вы можете получить это с помощью getIntent().getExtra[...]

попробуйте это:

import android.app.Activity;

import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class CustomWebView extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        String url = getIntent().getStringExtra("url");

         //super.onCreate(savedInstanceState);


         WebView webview = new WebView(this);
         setContentView(webview); 
        //progress bar optional
         getWindow().requestFeature(Window.FEATURE_PROGRESS);
        // alllow js
         webview.getSettings().setJavaScriptEnabled(true);

         final Activity activity = this;
         Toast.makeText(activity, "YO! " + url, Toast.LENGTH_SHORT).show();
         webview.setWebChromeClient(new WebChromeClient() {
           public void onProgressChanged(WebView view, int progress) {
             // Activities and WebViews measure progress with different scales.
             // The progress meter will automatically disappear when we reach 100%
             activity.setProgress(progress * 1000);
           }
         });
         webview.setWebViewClient(new WebViewClient() {
           public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
             Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
           }
         });

         webview.loadUrl(url);



    }


}
...