2017-11-14 8 views
1

以下のアクティビティのコードをFragmentのコードに変更するにはどうすればよいですか?これはAndroidスタジオのコードです。私のページは今、断片です、私はこのコードを使用したいと私はフラグメントコードに変更したい。もし誰が知っていたら、教えてください、ありがとう。また、私は現在のコードを断片化して、その断片化されたコードと接続します。フラグメント内のonBackPressedを作成する

断片コード:

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; 

} 
} 

アクティビティコード:

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

あなたが得るエラーです義和あなたの活動 – diegoveloper

+0

からのフラグメントを作成するときにコードを入れて?、私は、あなただけonCreateView' 'でビューを膨らませる必要があり、あなたがonViewCreated'と負荷'でセットアップあなたのWebViewをすべきだと思います'onStart'のリクエスト – Lamar

+0

私は既にこのリンクに解決策を見つけました:https://stackoverflow.com/questions/10631425/how-to-add-go-back-function-in-webview-inside-fragment –

答えて

1

これはWebViewの内部で、前のページをロードするための

@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; 
} 

を更新あなたの必要性につき、あなたのonCreateView方法であり、

あなたのonCreateViewは質問と同じです。私は断片で簡単な変更を加えました。

Tab1をフラグメントは、今すぐあなたの活動

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(); 

    } 
} 
} 

NOTEなります

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; 
} 


} 

のようになります:ここで私はただ簡単にするためのWebView公衆を保ちました。プライベートにして、ゲッターを使ってアクセスしてください。より多くのフラグメントを使用する場合は、各フラグメントにTAGを追加し、どのフラグメントが可視であるかを識別します。

+0

実際に私はそのようにしたい、ウェブページを読み込むと、ウェブページには他のページがあるので、そのウェブサイトのボタンアイコンを別のページにクリックし、バックプレスをクリックすると、前のページに戻る訪問し、最後にアプリケーションのホームページに戻って、私の質問を理解して、あなたのコードは大丈夫ですが、直接アプリケーションのホームページに戻る –

関連する問題