दिलचस्प पोस्ट
यूआईएलबल में लाइन रिक्ति को कैसे नियंत्रित किया जाए मैं अजगर (2.7) में स्पॉन्ड प्रोसेस से विंडोज कंसोल को कैसे समाप्त कर सकता हूं? जावा में एक अद्वितीय कंप्यूटर पहचानकर्ता कैसे प्राप्त करें (जैसे डिस्क आईडी या मदरबोर्ड आईडी) एकाधिक कॉलम पर SQLite प्राथमिक कुंजी .NET 4.0 और खतरनाक OnUserPreferenceChanged हैंग रनटाइम पर आउटपुट फाइलनाम बनाने के लिए स्ट्रिंग्स को पूर्णांक परिवर्तित करें .NET कन्वर्ट संख्या स्ट्रिंग प्रतिनिधित्व (1 से एक, 2 से दो, आदि …) सीएसएस प्रगति सर्किल सीतनिद्रा में होना – @ एलेमेंट कलेक्शन – अजीब हटाना / डालने के व्यवहार कैसे घटना पर jquery पर एक निर्देश अद्यतन एनजी मॉडल बनाने के लिए? यदि उपयोगकर्ता नाम पहले से ही अस्तित्व में है, तो जांचने के लिए jQuery के दूरस्थ विधि उपयोग मान्य करें क्या मुझे 'सीमा: कोई नहीं' या 'सीमा: 0' का उपयोग करना चाहिए? क्या है और मुझे इसका उपयोग कब करना चाहिए? सी # – एक WPF अनुप्रयोग में उपयोगकर्ता सेटिंग्स को बचाने के लिए दृष्टिकोण? एंड्रॉइड में बिटमैप से सर्कुलर एरिया क्रॉप करना

कैसे "वापस जाओ" समारोह में जोड़ें WebView टुकड़े के अंदर?

अद्यतन: हल! समस्या मेरे Viewpager WebView से संबंधित थी।

मैं एक "वापस जाना" समारोह को मेरे WebView को जोड़ने का प्रयास कर रहा हूं जो एक Fragment अंदर है। लेकिन मैं यह नहीं समझ सकता कि कैसे:

 public final class TestFragment extends Fragment { static WebView mWeb; private View mContentView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mContentView = inflater.inflate(R.layout.webview, null); mWeb = (WebView)mContentView.findViewById(R.id.webview); WebSettings settings = mWeb.getSettings(); settings.setJavaScriptEnabled(true); settings.setSupportZoom(false); mWeb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); mWeb.getSettings().setBuiltInZoomControls(false); mWeb.loadUrl("myurl..."); mWeb.setOnKeyListener(new OnKeyListener(){ public boolean onKey(View v, int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWeb.canGoBack()) { mWeb.goBack(); return true; } return false; } }); } } 

मैंने भी कुछ की कोशिश की:

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWeb.canGoBack()) { mWeb.goBack(); return true; } return super.onKeyDown(keyCode, event); } 

एक अन्य समाधान लेकिन एक ही समस्या:

 @Override public void onBackPressed() { if(webView.canGoBack()) webView.goBack(); else super.onBackPressed(); } 

किसी भी विचार कैसे यह काम पाने के लिए?

वेब के समाधान से एकत्रित समाधान "कैसे "वापस जाओ" समारोह में जोड़ें WebView टुकड़े के अंदर?"

शायद इसकी एंड्रॉइड प्रतिबंध हेन्डलर का उपयोग करने का प्रयास करें

 public final class TestFragment extends Fragment { static WebView mWeb; private View mContentView; private Handler handler = new Handler(){ @Override public void handleMessage(Message message) { switch (message.what) { case 1:{ webViewGoBack(); }break; } } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { mContentView = inflater.inflate(R.layout.webview, null); mWeb = (WebView)mContentView.findViewById(R.id.webview); WebSettings settings = mWeb.getSettings(); settings.setJavaScriptEnabled(true); settings.setSupportZoom(false); mWeb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); mWeb.getSettings().setBuiltInZoomControls(false); mWeb.loadUrl("myurl..."); mWeb.setOnKeyListener(new OnKeyListener(){ public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == MotionEvent.ACTION_UP && mWeb.canGoBack()) { handler.sendEmptyMessage(1); return true; } return false; } }); } private void webViewGoBack(){ mWeb.goBack(); } } 

असल में आप सीधे टुकड़े के अंदर नहीं कर सकते। onBackPressed FragmentActivity में ओवरराइड किया जा सकता है आप क्या कर सकते हैं:

  1. गतिविधि पर onBackPressed ओवरराइड करें
  2. जब onBackPressed कहा जाता है, तो जांचें कि क्या वर्तमान खंड का उदाहरण webview दिखा रहा है।
  3. यदि ऐसा है, तो webview वापस जा सकते हैं, तो यह fragment पूछें।
  4. अगर ऐसा नहीं है, तो super बुलाओ या आपको जो भी ज़रूरत हो

संपादित करें:

  @Override public void onBackPressed() { Fragment webview = getSupportFragmentManager().findFragmentByTag("webview"); if (webview instanceof MyWebViewFragment) { boolean goback = ((MyWebViewFragment)webview).canGoBack(); if (!goback) super.onBackPressed(); } } 

WebViewActivity.java , मैंने 1 विधि जोड़ दी है:

 @Override public void onBackPressed() { WebViewFragment fragment = (WebViewFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentContainer); if (fragment.canGoBack()) { fragment.goBack(); } else { super.onBackPressed(); } } 

WebViewFragment.java , मैंने 2 तरीके जोड़ दिए:

 public boolean canGoBack() { return mWebView.canGoBack(); } public void goBack() { mWebView.goBack(); } 

मेरा समाधान टुकड़ा में था, मैं सार्वजनिक तरीकों में जोड़ा

 public static boolean canGoBack(){ return mWebView.canGoBack(); } public static void goBack(){ mWebView.goBack(); } 

तो गतिविधि से मैं कॉल करता हूँ

 @Override public void onBackPressed() { if(webFragment.canGoBack()){ webFragment.goBack(); }else{ super.onBackPressed(); } } 

नोट mwebview स्थिर है

आप यह कर सकते हैं:

  • Activity डाल:

     // Set WebView public void setWebView(WebView web) { this.web = web; } 
  • ActivityCreated() बाद वेब टुकड़ा में:

    ((Your_Activity) getActivity()).setWebView(webView);

  • इस तरह से onCreateView() से webView सेट करने के लिए मत भूलना:

     @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { webView = (WebView) inflater.inflate(R.layout.your_web_fragment, container, false); return web; } 

@ ओमिड अम्निविया का उत्तर आपके ऐप को दुर्घटना का समाधान है

 @Override public void onBackPressed() { if(webFragment.isInitialized && webFragment.canGoBack()){ webFragment.goBack(); }else{ super.onBackPressed(); } } 

आपको यह जांचना होगा कि क्या आपका क्लास प्रारंभ कर दिया गया है या नहीं।

@ रोमन ब्लैक के जवाब ने मुझे सही विचार दिया, लेकिन जब से हम कोटलिन का उपयोग करते हैं, तो मुझे जवाब थोड़ा सा बदलना पड़ता था।

 webView.setOnKeyListener { _, _, keyEvent -> if (keyEvent.keyCode == KeyEvent.KEYCODE_BACK && !webView.canGoBack()) { false } else if (keyEvent.keyCode == KeyEvent.KEYCODE_BACK && keyEvent.action == MotionEvent.ACTION_UP) { webView.goBack() true } else true } 

यदि आप इसे रिटर्न के साथ करना चाहते हैं तो आपको ऐसा कुछ जोड़ना है:

 return@setOnKeyListener true 

सबसे पहले टुकड़ा में दबाकर वापस आ गया

  mContentView.setFocusableInTouchMode(true); mContentView.requestFocus(); mContentView.setOnKeyListener( new OnKeyListener() { @Override public boolean onKey( View v, int keyCode, KeyEvent event ) { if( keyCode == KeyEvent.KEYCODE_BACK ) { if (mWebView.canGoBack()) { mWebView.goBack(); retune false; } else { return true; } } return false; } } ); 

आशा है कि यह काम करेगा