片段addToBackStack关闭应用程序 [英] Fragments addToBackStack Closing the application

查看:197
本文介绍了片段addToBackStack关闭应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我打电话从HomeScreen.java一些片断。现在,每当我preSS后退按钮中的任何片段,它关闭应用程序。但我想这是loaded.Following previous片段HomeScreen.java code。

I am calling some fragments from HomeScreen.java. Now whenever i press back button in any fragment, its closes the application. But i want previous fragment which was loaded.Following is HomeScreen.java code.

public class HomeScreen extends AppCompatActivity implements JobListFragment.OnJobSelectedListener {



    Timer timer;
    TimerTask timerTask;
    final android.os.Handler handler = new android.os.Handler();

    FragmentTransaction transaction;
    android.app.FragmentManager fragmentManager;
    ProfileFragment profileFragment;
    HomeFragment homeFragment;
    LocationFragment locationFragment;
    JobListFragment jobListFragment;
    JobDetailsFragment jobDetailsFragment;

    ActionBar actionBar;
    Toolbar toolbar;

    Fragment fragment;




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

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        actionBar = getSupportActionBar();

        KitLocate.initKitLocate(HomeScreen.this, "f08fb7d8-bc35-46c6-aaad-07657eb4a59c");
        KitLocate.setUniqueUserID(HomeScreen.this, Utils.getUniqueId(HomeScreen.this));
        String onlineStatus = Utils.getStringPref(HomeScreen.this, Constants.onlineStatus);

        profileFragment =new ProfileFragment();
        homeFragment = new HomeFragment();
        locationFragment=new LocationFragment();

        jobListFragment = new JobListFragment();
        jobDetailsFragment = new JobDetailsFragment();
        fragmentManager =  getFragmentManager();
        transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.fragmentContainer, homeFragment);

        transaction.commit();




    }

    public void startTimer() {
        //set a new Timer
        timer = new Timer();

        //initialize the TimerTask's job
        initializeTimerTask();

        //schedule the timer, after the first 5000ms the TimerTask will run every 10000ms
        timer.schedule(timerTask, 1000, 10000); //
    }

    public void stoptimertask(View v) {
        //stop the timer, if it's not already null
        if (timer != null) {
            timer.cancel();
            timer = null;
        }
    }

    public void initializeTimerTask() {

        timerTask = new TimerTask() {
            public void run() {

                //use a handler to run a toast that shows the current timestamp
                handler.post(new Runnable() {
                    public void run() {
                        String locality = PeriodicHandler.getInstance().getLocality();
                        String subLocality = PeriodicHandler.getInstance().getSubLocality();

                        LocationFragment locationFrag = (LocationFragment)
                                getFragmentManager().findFragmentById(R.id.fragmentContainer);
                        /*if(locationFrag != null){
                            System.out.println();
                            locationFrag.updateLocationText();
                        }*/


                    }
                });
            }
        };
    }


    @Override
    public void onJObSelected(int position, String jobId) {
        fragmentManager =  getFragmentManager();
        transaction = fragmentManager.beginTransaction();
        jobDetailsFragment = new JobDetailsFragment();
        if(jobDetailsFragment.isAdded() || jobDetailsFragment.isHidden()){
            System.out.println("44444444444444444444");
            Bundle bundle = new Bundle();
            bundle.putString(Constants.jobID, jobId);
            jobDetailsFragment.setArguments(bundle);
            transaction.replace(R.id.fragmentContainer, jobDetailsFragment);
            transaction.addToBackStack(null);

        }else{


            Bundle bundle = new Bundle();
            bundle.putString(Constants.jobID, jobId);
            jobDetailsFragment.setArguments(bundle);
            transaction.add(R.id.fragmentContainer, jobDetailsFragment);//transaction.show(profileFragment);

        }
        transaction.commit();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.home_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {

            case R.id.action_account:
                actionBar.setDisplayShowHomeEnabled(false);
                actionBar.setDisplayHomeAsUpEnabled(true);
                actionBar.setHomeButtonEnabled(true);

                fragmentManager =  getFragmentManager();
                transaction = fragmentManager.beginTransaction();
                System.out.println("isadded"+profileFragment.isAdded()+"isHidden"+profileFragment.isHidden());
                if(profileFragment.isAdded() || profileFragment.isHidden()) {
                    /*transaction.show(profileFragment);
                    transaction.hide(locationFragment);*/
                    profileFragment = new ProfileFragment();
                    transaction.replace(R.id.fragmentContainer, profileFragment, LocationFragment.TAG);
                    transaction.addToBackStack("account");
                }else{
                    transaction.add(R.id.fragmentContainer, profileFragment);//transaction.show(profileFragment);
                }
                transaction.commit();
                break;
            case R.id.action_profile_location:
                actionBar.setDisplayShowHomeEnabled(false);
                actionBar.setDisplayHomeAsUpEnabled(true);
                actionBar.setHomeButtonEnabled(true);

                fragmentManager =  getFragmentManager();
                transaction = fragmentManager.beginTransaction();
                System.out.println("isadded"+locationFragment.isAdded()+"isHidden"+locationFragment.isHidden());
                if(locationFragment.isAdded() || locationFragment.isHidden()) {
                    /*transaction.show(locationFragment);
                    transaction.hide(profileFragment);*/
                    locationFragment = new LocationFragment();
                    transaction.replace(R.id.fragmentContainer, locationFragment);
                    transaction.addToBackStack(null);
                }
                else{
                    transaction.add(R.id.fragmentContainer, locationFragment);//transaction.show(profileFragment);

                }
                transaction.commit();
                break;
            case R.id.action_profile_time:
                actionBar.setDisplayShowHomeEnabled(false);
                actionBar.setDisplayHomeAsUpEnabled(true);
                actionBar.setHomeButtonEnabled(true);

                fragmentManager =  getFragmentManager();
                transaction = fragmentManager.beginTransaction();
                System.out.println("isadded" + jobListFragment.isAdded() + "isHidden" + jobListFragment.isHidden());
                if(jobListFragment.isAdded() || jobListFragment.isHidden()){
                    System.out.println("111111111111111111");
                    // transaction.show(jobListFragment);
                    jobListFragment = new JobListFragment();
                    transaction.replace(R.id.fragmentContainer, jobListFragment);
                    transaction.addToBackStack("profile");

                }else{
                    transaction.add(R.id.fragmentContainer, jobListFragment);//transaction.show(profileFragment);
                }
                transaction.commit();
                break;
            case android.R.id.home:
                actionBar.setDisplayShowHomeEnabled(false);
                actionBar.setDisplayHomeAsUpEnabled(false);
                actionBar.setHomeButtonEnabled(false);
                fragmentManager =  getFragmentManager();
                transaction = fragmentManager.beginTransaction();
                System.out.println("isadded"+homeFragment.isAdded()+"isHidden"+homeFragment.isHidden());
                if(homeFragment.isAdded() || homeFragment.isHidden()){
                    System.out.println("55555555555555555");
                    //transaction.remove(homeFragment);
                    //transaction.add(R.id.fragmentContainer, homeFragment);
                    //transaction.show(homeFragment);
                    homeFragment = new HomeFragment();
                    transaction.replace(R.id.fragmentContainer, homeFragment);
                    transaction.addToBackStack("home");
                }else{
                    transaction.add(R.id.fragmentContainer, homeFragment);//transaction.show(profileFragment);
                }
                transaction.commit();
                break;

        }
        return true;
    }
   /*@Override
    public void onBackPressed() {
        if (getFragmentManager().popBackStackImmediate()) return;
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
                finish();
        else
            finishAfterTransition();
    }*/

}

所以,我有三个菜单图标,我从菜单加载片段clicks.So请让我知道我做的事是错误的。

So i have three menu icons, i am loading fragments from menu clicks.So please let me know something i did wrong.

推荐答案

假设你有 3 片段

(1)片段的 A

(2)片段的

(3)片段的 C

您要去的 A到B 以及 B到C 以及返回preSS 回归到B 然后再返回preSS 回归A 以及返回preSS 关闭应用

You are going A to B then B to C then Backpress will return to B then again Backpress will return to A then Backpress will close app.

方法替换片段加入代码

通过你的片段标记如下方法的参数。

Pass your fragment and tag as arguments in below method.

private void replaceFragment(Fragment frag, String tag) {
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.realtabcontent, frag);
    transaction.addToBackStack(tag);
    transaction.commitAllowingStateLoss();
}

不需要写的 onBack $ P $(PSS) fragmentManager.popBackStack(),将自动句柄。

完成

这篇关于片段addToBackStack关闭应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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