在片段中使onBackPressed [英] Make the onBackPressed in Fragment

查看:49
本文介绍了在片段中使onBackPressed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将活动下方的代码更改为Fragment中的代码?这是Android Studio代码.我的页面现在是片段",我想使用此代码,并希望将其修改为片段代码.如果谁知道,请告诉我,谢谢.而且我还将当前代码放在片段中,并且活动与片段连接.

How to change code below of activity to the code in Fragment? This is Android Studio code. My page now is Fragment, I want use this code and i want modified to fragment code. If who know, tell me, thanks. And I also put my current code in fragment and the activity connect with fragment.

片段代码:

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

}
}
}

推荐答案

这是您根据需要使用的onCreateView方法

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

更新以在Webview中加载上一页

您的onCreateView与您提出的问题相同.我对Fragment做了一些简单的更改.

Your onCreateView is same as you put in question. I made some simple change in Fragment.

Tab1片段会像

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


}

现在您的活动将会

Now your Activity will be

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

注意:在这里我只是为了简单起见将webview公开.将其保密,并使用getter对其进行访问.如果要使用更多片段,请为每个片段添加TAG,并确定哪个片段可见.

NOTE: Here I kept webview public just for simplicity. Keep it private and use getter to access it. If you want to use more fragments then add TAG for each fragment and identify which fragment is visible.

这篇关于在片段中使onBackPressed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆