2017-11-14 3 views
1

Wie Code unten Aktivität des Codes in Fragment ändern? Dies ist Android Studio-Code. Meine Seite ist jetzt Fragment, ich möchte diesen Code verwenden und ich möchte den Fragmentcode modifizieren. Wenn wer es weiß, sag es mir, danke. Und ich stelle auch meinen aktuellen Code in Fragment und die Aktivität verbinden mit Fragment.Machen Sie die onBackPressed in Fragment

Fragment Code:

public class Tab1Fragment extends Fragment { 
Context mContext; 

public WebView webView; 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.tab1_fragment, container, false); 
    mContext = view.getContext();            
    webView = (WebView) view.findViewById(R.id.webview); 
    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webView.setInitialScale(1); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    webView.setScrollbarFadingEnabled(false); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.loadUrl("https://www.facebook.com/"); 
    webView.setWebViewClient(new WebViewClient()); 

    return view; 

} 
} 

Aktivitätscode:

public class Schedule extends AppCompatActivity { 

private static final String TAG = "Schedule"; 
private SectionsPagerAdapter mSectionsPagerAdapter; 

/** 
* The {@link ViewPager} that will host the section contents. 
*/ 
private ViewPager mViewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.schedule); 
    Log.d(TAG, "onCreate: Starting."); 
    initialiseView(); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); 
    setSupportActionBar(toolbar); 
    toolbar.setTitle("SCHEDULE"); 
    mTitle.setText(toolbar.getTitle()); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    if(getSupportActionBar() !=null){ 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
    } 


    // Create the adapter that will return a fragment for each of the three 
    // primary sections of the activity. 
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    mViewPager = (ViewPager) findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    setupViewPager(mViewPager); 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(mViewPager); 

} 
private void setupViewPager(ViewPager viewPager){ 
    SectionPageAdapter adapter = new SectionPageAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new Tab1Fragment(), "4 Sept 2018"); 
    adapter.addFragment(new Tab2Fragment(), "5 Sept 2018"); 
    adapter.addFragment(new Tab3Fragment(), "6 Sept 2018"); 
    viewPager.setAdapter(adapter); 
} 
private void initialiseView() { 

mTab1Fragment = new Tab1Fragment(); 

FragmentManager mFragmentManager = getSupportFragmentManager(); 

FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction(); 

mFragmentTransaction.replace(R.id.container, mTab1Fragment, "TAB 1 FRAGMENT"); 

mFragmentTransaction.commit(); 

} 

@Override 
public void onBackPressed() { 

//Toast.makeText(this, "Calling back pressed", Toast.LENGTH_SHORT).show(); 

if (mTab1Fragment != null) { 

    if (mTab1Fragment.webView.canGoBack()) { 

     mTab1Fragment.webView.goBack(); 

    } 

} else { 

    super.onBackPressed(); 

} 
} 
} 
+0

den Code legen, wenn Sie das Fragment aus Ihrer Aktivität – diegoveloper

+0

erstellen wha der Fehler, die Sie erhalten?, Ich glaube, Sie nur die Ansicht in 'onCreateView' aufblasen sollte, sollten Sie Ihre webView Setup in' onViewCreated' und Last die Anfrage in 'onStart' – Lamar

+0

Ich fand Lösung bereits, in diesem Link: https://stackoverflow.com/questions/10631425/how-to-add-go-back-function-in-webview-inside-fragment –

Antwort

1

Das ist Ihre onCreateView Verfahren nach Ihrem Bedarf

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.tab1_fragment, container, false); 

    webView = (WebView) view.findViewById(R.id.webview); 

    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webView.setInitialScale(1); 

    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 

    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    webView.setScrollbarFadingEnabled(false); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.loadUrl("https://www.facebook.com/"); 
    webView.setWebViewClient(new WebViewClient()); 

    view.setFocusableInTouchMode(true); 
    view.requestFocus(); 
    view.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View view, int code, KeyEvent keyEvent) { 

      if (code == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_UP) { 

       //Here is logic to handle back press event 

       return true; 

      } 


      return false; 
     } 
    }); 

    return view; 
} 

aktualisieren vorherige Seite innerhalb webview laden

Ihre onCreateView ist dasselbe wie Sie in Frage stellen. Ich habe in Fragment eine einfache Änderung vorgenommen.

Tab1 Fragment wird wie

public class Tab1Fragment extends Fragment { 

Context mContext; 

public WebView webView; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.tab1_fragment, container, false); 

    mContext = view.getContext(); 

    webView = (WebView) view.findViewById(R.id.webview); 

    WebSettings webSettings = webView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webView.setInitialScale(1); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
    webView.setScrollbarFadingEnabled(false); 
    webView.getSettings().setBuiltInZoomControls(true); 
    webView.loadUrl("https://www.facebook.com/"); 
    webView.setWebViewClient(new WebViewClient()); 

    return view; 
} 


} 

Jetzt ist Ihre Aktivität

public class SampleActivity extends AppCompatActivity { 

Tab1Fragment mTab1Fragment; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_sample); 


    initialiseView(); 

} 

private void initialiseView() { 

    mTab1Fragment = new Tab1Fragment(); 

    FragmentManager mFragmentManager = getSupportFragmentManager(); 

    FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction(); 

    mFragmentTransaction.replace(R.id.container, mTab1Fragment, "TAB 1 FRAGMENT"); 

    mFragmentTransaction.commit(); 

} 

@Override 
public void onBackPressed() { 

    //Toast.makeText(this, "Calling back pressed", Toast.LENGTH_SHORT).show(); 

    if (mTab1Fragment != null) { 

     if (mTab1Fragment.webView.canGoBack()) { 

      mTab1Fragment.webView.goBack(); 

     } 

    } else { 

     super.onBackPressed(); 

    } 
} 
} 

Hinweis sein: Hier hielt ich webview Öffentlichkeit nur der Einfachheit halber. Halte es privat und benutze Getter, um darauf zuzugreifen. Wenn Sie mehr Fragmente verwenden möchten, fügen Sie TAG für jedes Fragment hinzu und identifizieren Sie, welches Fragment sichtbar ist.

+0

Eigentlich ich Ich möchte, dass, wenn ich eine Webseite lade, die Webseite eine andere Seite haben wird, also werde ich das Icon auf dieser Webseite auf eine andere Seite klicken, und ich möchte eine, wenn ich auf die Zurück-Taste klicke, es wird zu jeder vorherigen Seite zurückgehen besuchen und zurück zur Startseite der Anwendung, hoffe, meine Frage zu verstehen, ist Ihr Code in Ordnung, aber es direkt zurück zur Startseite der Anwendung –

Verwandte Themen