2014-09-25 124 views
0

我已經有一個加載了內容的WebView,我需要選擇文本,這將在彈出窗口中打開一個新的WebView。彈出窗口將包含一個我將提交的表單,當我點擊輸入時,它將保存數據並關閉彈出窗口。在這個階段,我需要通過選擇文本或單擊按鈕來打開WebView彈出窗口。Android:如何在彈出窗口中打開WebView?

我曾嘗試回答https://stackoverflow.com/a/9173368/2341601但這種崩潰的應用程序,當我做

WebView wv = new WebView(this); 

logcat的消息:

Process: com.example.user.testapp, PID: 13984 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.testapp/com.example.user.testapp.MainActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2404) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464) 
     at android.app.ActivityThread.access$900(ActivityThread.java:172) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:146) 
     at android.app.ActivityThread.main(ActivityThread.java:5653) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
     at dalvik.system.NativeStart.main(Native Method) 

產生的原因:android.util.AndroidRuntimeException:requestFeature()必須是在添加內容之前調用

+0

安置自己的logcat的,如果你做到了。 – Piyush 2014-09-25 05:04:54

+0

使用'剪貼板'複製文本第一 – prabhakaran 2014-09-25 05:15:13

+0

請發佈您的logcat以獲得一些有意義的幫助。 – 2014-09-25 06:14:02

回答

0
final Dialog dialog = new Dialog(context); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.webview_layout); 

WebView wv = (WebView) dialog 
      .findViewById(R.id.webview); 

wv.loadUrl("http:\\www.google.com"); 
wv.setWebViewClient(new WebViewClient() { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 

     return true; 
    } 
}); 

dialog.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(DialogInterface dialog, int keyCode, 
       KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 

       dialog.dismiss(); 
      } 

      return false; 
     } 
    }); 

webview_layo XML.XML

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

    <WebView 
     android:id="@+id/webView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 
+0

在這裏,webview_layout是xml文件,並在那放了一個webview在裏面 – 2014-09-25 05:16:20

+0

什麼是R.layout.webview_layout?如果我使用WebView的佈局,代碼不會編譯。我也認爲使用片段而不是活動可能會更好。 – 2014-09-25 05:39:32

+0

你不知道關於R.layout.webview_layout?奇怪的 – 2014-09-25 05:45:25

0

避免請求未來崩潰。

DialogFragment.java

public class DialogFragment extends android.support.v4.app.DialogFragment { 

private boolean isModal = false; 

public static DialogFragment newInstance() 
{ 
    DialogFragment frag = new DialogFragment(); 
    frag.isModal = true; // WHEN FRAGMENT IS CALLED AS A DIALOG SET FLAG 
    return frag; 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    if(isModal) // AVOID REQUEST FEATURE CRASH 
    { 
    return super.onCreateView(inflater, container, savedInstanceState); 
    } 
    else 
    { 
    View view = inflater.inflate(R.layout.dialog_webview, container, false); 
    setupUI(view); 
    return view; 
    } 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    // Get the layout inflater 

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_webview, null); 

    builder.setView(view); 
    WebView wv = (WebView) view.findViewById(R.id.webView); 

    wv.loadUrl("http:\\www.google.com"); 
    wv.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 

      return true; 
     } 
    }); 
    return builder.create(); 
} 
} 
+0

謝謝,但應用程序崩潰在最後一行 - df.show(getSupportFragmentManager(),「dialog」); – 2014-09-25 07:14:11

+1

可能是你的libs文件夾(android.support.v4.app.FragmentActivity.getSupportFragmentManager())缺少android-support-v7-appcompat.jar。發佈您的logcat也.... – raja 2014-09-25 08:19:37

+0

支持庫不在libs文件夾,但是,我有這些在build.gradle文件中定義和相關的XML文件也存在.idea \庫文件夾中。我檢查了SDK管理器並安裝了支持庫。 – 2014-09-26 01:14:47