दिलचस्प पोस्ट
कैच ब्लॉक में फेंक दिया अपवाद – फिर से पकड़ा जाएगा? प्रत्येक एन-वें चरित्र पर एक स्ट्रिंग को विभाजित करना मिलीसेकंड परिशुद्धता के साथ टाइमस्टैम्प: उन्हें MySQL में कैसे बचाया जाता है नेस्टेड फोरैच स्टेटमेंट के साथ मल्टी-आयामी अर्रे को घुमाइए मैं एक सर्वरसेकेट को () विधि को कैसे बाधित कर सकता हूं? जेनेरिक JSF इकाई कनवर्टर किसी फ़ाइल से लाइन ढूंढें जो किसी अन्य फ़ाइल में मौजूद नहीं हैं मूल्य-प्रकार ढेर पर क्यों संग्रहीत किए जाते हैं? सीएसएस चयनकर्ता और jQuery फिल्टर के बीच का अंतर? स्टोरीबोर्ड में कस्टम सेल रो ऊंचाई सेटिंग प्रतिसाद नहीं दे रहा है मेरे एंड्रॉइड एप्लिकेशन में एक फेसबुक पेज की तरह एक बटन जोड़ने के लिए कैसे? मैं पायथन में एक्सएमएल को कैसे पार्स कर सकता हूँ? टूलबार एंड्रॉइड में SearchView का उपयोग कैसे करें सी + + हैडर फ़ाइलें, कोड पृथक्करण मैं C / C ++ में विंडोज फ़ंक्शन कैसे हुक कर सकता हूं?

कैसे "वापस जाओ" समारोह में जोड़ें 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; } } ); 

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