Je crée une application web avec 3 onglets ActionBar. Chaque onglet déclenche un webview. Sur l'un des onglets, j'ai besoin du bouton de retour de l'appareil Android pour déclencher l'action goBack pour ce webview. J'essaye une solution semblable à celle suggérée par blackbelt et netinept chez How to add "Go Back" function in WebView inside Fragment?, mais j'obtiens l'erreur suivante - "la méthode canGoBack() est indéfinie pour le type FragmentTab3" dans mon fichier MainActivity.java.Erreur webview canGoBack() avec le fragment ActionBarSherlock
Voici mon code. S'il te plaît, fais-moi savoir ce que je peux faire de mal.
--- --- MainActivity.java
où je reçois "La méthode canGoBack() est définie pour le type FragmentTab3"
public class MainActivity extends SherlockFragmentActivity {
ActionBar.Tab Tab1,Tab2,Tab3;
Fragment fragmentTab1 = new FragmentTab1();
Fragment fragmentTab2 = new FragmentTab2();
Fragment fragmentTab3 = new FragmentTab3();
@Override protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
int index = getSupportActionBar().getSelectedNavigationIndex();
outState.putInt("selected_tab_index", index);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
// Hide Actionbar Icon
actionBar.setDisplayShowHomeEnabled(false);
// Hide Actionbar Title
actionBar.setDisplayShowTitleEnabled(false);
// Create Actionbar Tabs
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Set Tab Icon and Titles
Tab1 = actionBar.newTab().setText("Tab 1");
Tab2 = actionBar.newTab().setText("Tab 2");
Tab3 = actionBar.newTab().setText("Tab 3");
// Set Tab Listeners
Tab1.setTabListener(new TabListener(fragmentTab1));
Tab2.setTabListener(new TabListener(fragmentTab2));
Tab3.setTabListener(new TabListener(fragmentTab3));
// Add tabs to actionbar
actionBar.addTab(Tab1);
actionBar.addTab(Tab2);
actionBar.addTab(Tab3);
if (savedInstanceState != null) {
int index = savedInstanceState.getInt("selected_tab_index", 0);
getSupportActionBar().setSelectedNavigationItem(index);
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
Fragment webview = getSupportFragmentManager().findFragmentById(R.id.webview);
if (webview instanceof FragmentTab3) {
boolean goback = ((FragmentTab3)webview).canGoBack();
if (!goback)
super.onBackPressed();
}
}
}
--- FragmentTab3.java-- -
public class FragmentTab3 extends SherlockFragment
{
public WebView webView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragmenttab3, container, false);
webView = (WebView) rootView.findViewById(R.id.webview);
webView.setBackgroundColor(0);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.example.com");
webView.requestFocusFromTouch();
return rootView;
}
}
--- --- fragmenttab3.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<WebView
android:id="@+id/webview"
android:tag="webview_tag"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
Merci. J'ai ajouté le code que vous avez suggéré et cela ne fonctionne pas encore. J'ai couru le débogueur et j'ai vu que webview est Null à 'Fragment webview = getSupportFragmentManager(). FindFragmentById (R.id.webview);' @blackbelt – user2859868
Toujours en train de faire des tests, mais je l'ai fait fonctionner en changeant 'Fragment webview = getSupportFragmentManager(). findFragmentById (R.id.webview);' 'Fragment webview = getSupportFragmentManager(). findFragmentById (R.id. fragment_container); ' – user2859868