दिलचस्प पोस्ट
क्या इसे कांगड़ा 2 से कोनेर 4 में स्थानांतरित करना उचित है? पोस्टग्रेएसक्यूएल: एक प्रश्न के लिए पंक्तियों की गणना 'मिनट से' गतिशील रूप से XmlInclude विशेषता को जोड़ने के लिए कैसे करें jQuery ईवेंट को एक ट्रिगर करने के लिए ट्रिगर करने पर ट्रिगर होता है जावा में कुछ निर्दिष्ट समय सीमा के बाद धागा को मारना क्या आप कई फिल्टर के साथ Directory.GetFiles () को कॉल कर सकते हैं? सभी ब्राउज़रों में स्क्रॉल इनटोव काम करते हैं? क्या किसी पाश में एक चर को घोषित करने के लिए कोई उपरि है? (सी ++) एफएफपीएपी का उपयोग करके दो ऑडियो फाइलों को ओवरले कैसे करें छंटनी की सूची <स्ट्रिंग> सी # में होस्ट में सी # स्पूफिंग में वेब पेज का अनुरोध करें लैंप: कैसे बनाने के लिए। उड़ने पर उपयोगकर्ता के लिए बड़ी फ़ाइलों की ज़िप, बिना डिस्क / सीपीयू थ्रेसिंग जुड़ने के मॉडल में चेकबॉक्स और अतिरिक्त फ़ील्ड के साथ फार्म के माध्यम से रेल हैं JSON नोड या एक्सप्रेस का उपयोग करने के लिए उचित तरीका है (एचटीएसीएसी) डायरेक्ट यूआरएल एक्सेस से फाइल को कैसे रोकें?

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

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

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

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