[英]Make the onBackPressed in Fragment
如何將活動下面的代碼更改為片段中的代碼? 這是 Android Studio 代碼。 我的頁面現在是 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 中做了一些簡單的改變。
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;
}
}
現在你的活動將是
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 並確定哪個片段可見。
override fun onAttach(context: Context) {
super.onAttach(context)
val callback: OnBackPressedCallback = object : OnBackPressedCallback(
true
) {
override fun handleOnBackPressed() {
// Leave empty do disable back press.
}
}
requireActivity().onBackPressedDispatcher.addCallback(
this,
callback
)
}
override fun onResume() {
super.onResume()
requireView().isFocusableInTouchMode = true
requireView().requestFocus()
requireView().setOnKeyListener { v, keyCode, event ->
if (event.action === KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
// Add your code here
true
} else false
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.