java - fragment 无法正常工作

标签 java android android-fragments navigation-drawer android-tabhost

我在我的应用程序中使用抽屉导航,一切正常,问题是 onbackpress 我的应用程序正在关闭,没有应用程序崩溃,只是我的应用程序正在关闭

以下是我的代码和屏幕截图,有人可以帮忙吗?

主要 Activity

@Override
    public void onDrawerItemSelected(View view, int position) {
        displayView(position);
    }

    private void displayView(int position) {
        Fragment fragment = null;
        String title = getString(R.string.app_name);

        switch (position) {
            case 0:
                fragment = new HomeFragment();

                title = getString(R.string.title_home);
                break;
            case 1:
                fragment = new FriendsFragment();


                title = getString(R.string.title_friends);
                break;
            case 2:
                fragment = new MessagesFragment();


                title = getString(R.string.title_messages);
                break;

            case 3:
                fragment = new Profiles();


                title = getString(R.string.title_pro);
                break;
            case 4:
                fragment = new AboutUsFragment();
                title = getString(R.string.title_aboutus);
                break;
            case 5:
                fragment = new FAQ();
                title = getString(R.string.title_faq);
                break;
            case 6:
                fragment = new Privacypolicy();
                title = getString(R.string.title_privacypolicy);
                break;
            case 7:
                fragment = new ContactUs();
                title = getString(R.string.title_contacts);
                break;

            case 8:
                // session.logoutUser();
                LoginManager.getInstance().logOut();
               // Intent intent=new Intent(MainActivity.this,LoginPage.class);
                // startActivity(intent);
                title = getString(R.string.title_logout);
                break;
            default:
                break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.container_body, fragment);
            fragmentTransaction.commit();
            getSupportActionBar().setTitle(title);
        }
    }

   /* @Override
    public void onBackPressed() {

        int count = getFragmentManager().getBackStackEntryCount();

        if (count == 0) {
            super.onBackPressed();
            //additional code
        } else {
            getFragmentManager().popBackStack();
        }

    }*/

    @Override
    public void onBackPressed(){
        FragmentManager fm = getSupportFragmentManager();
        if (fm.getBackStackEntryCount() > 1) {
            Log.i("MainActivity", "popping backstack");
            fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

        } else {
            Log.i("MainActivity", "nothing on backstack, calling super");
            super.onBackPressed();
        }
    }
}

首页 fragment .java

public class HomeFragment extends Fragment {

    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;

    private FragmentTabHost tabHost;
    private SearchView searchView;
    // private String strtext;
    // private String FBIDs;
    // private String GIDs;


    public HomeFragment() {
    }

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

        tabHost = new FragmentTabHost(getActivity());
        tabHost.setup(getActivity(), getChildFragmentManager(), R.layout.my_parent_fragment);
        // strtext = getArguments().getString("user_login_id");


        //  System.out.println("<<<<<<<<<<<<<< Session ID :  " + strtext);

        Bundle arg1 = new Bundle();
        arg1.putInt("Arg for Frag1", 1);
       /* if(strtext!=null) {
            arg1.putString("user_logid", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("one").setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_profile_tabs, "Home")), DiscoverFragment.class, arg1);
        Bundle arg2 = new Bundle();

        arg2.putInt("Arg for Frag2", 2);

       /* if(strtext!=null) {
            arg2.putString("user_logid_sectab", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("Sec").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_frnds_tab, "Invite")), ShopFragment.class, arg2);


        Bundle arg3 = new Bundle();
        arg3.putInt("Arg for Frag3", 3);

      /*  if(strtext!=null) {
            arg3.putString("user_logid_thirdtab", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("Third").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_wish_tab, "Wish")), Thirdtab.class, arg3);


        Bundle arg4 = new Bundle();
        arg4.putInt("Arg for Frag4", 4);
        /*if(strtext!=null) {
            arg4.putString("user_logid_fourthtab", strtext);
        }*/

        tabHost.addTab(tabHost.newTabSpec("Four").
                setIndicator(getTabIndicator(tabHost.getContext(), R.drawable.icon_notification_tab, "Alert")), FourthTabs.class, arg4);

        return tabHost;


    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    public View getTabIndicator(Context context, int icon, String text) {
        View view = LayoutInflater.from(context).inflate(R.layout.tab_layout, null);
        ImageView iv = (ImageView) view.findViewById(R.id.indicatorImageView);
        iv.setImageResource(icon);
        TextView txt = (TextView) view.findViewById(R.id.txttb);
        txt.setText(text);
        return view;
    }


}

发现 fragment .java

public class DiscoverFragment extends Fragment {


    private Button btn;

    public DiscoverFragment() {
    }

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

        View rootView = inflater.inflate(R.layout.discover_frag, container, false);

        btn=(Button)rootView.findViewById(R.id.btnhomf);

        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                WishaFriend ff = new WishaFriend();

                android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
                android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
                fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
               // ft.replace(R.id.container_body,ff);
               ft.replace(((ViewGroup) getView().getParent()).getId(), ff);

                // fm.addToBackStack("sds");
               ft.commit();
            }
        });

        return rootView;
    }

}

当我运行应用程序时,它显示为第一个屏幕

enter image description here

然后我点击 gotonextfrag 按钮,它会重定向到下一个 fragment ,我得到这个屏幕

enter image description here

现在从这个 fragment 开始,如果我按下设备的后退按钮,我的应用程序就会关闭

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">



        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            style="@style/MyToolBarStyle.Base"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"

            >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"

                android:src="@drawable/toolbartitle"/>

        </android.support.v7.widget.Toolbar>


    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawerLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <!-- activity view -->
        <!-- Framelayout to display Fragments -->
        <FrameLayout
            android:id="@+id/container_body"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <!-- navigation drawer -->
        <fragment
            android:id="@+id/fragment_navigation_drawer"
            android:name="com.balloons.balloonationn.activity.FragmentDrawer"
            android:layout_width="@dimen/nav_drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:layout="@layout/fragment_navigation_drawer"
            tools:layout="@layout/fragment_navigation_drawer" />

    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

最佳答案

这是Activity的正常行为。当您按下后退按钮时,它会结束当前 Activity 。

Override back button

关于java - fragment 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670278/

相关文章:

java - Hibernate:找不到查询类的持久类

java - 用于存储key-value-value等元素的集合

java - 选项卡布局内的水平回收器 View

java - 我做了一个 "public void"函数,我现在如何在另一个 Activity 中调用它?

javascript - 打开键盘时 react 原生底部标签栏向上推

java - 如何在 fragment 中声明适配器?

java - 从 Fragment 外部更新 TextView

java - 如何以编程方式实例化 Spring Boot 测试?

android - 无法解析 : firebase-iid-interop

android - 使用 fragment 方法在所有屏幕中显示选项卡选项