使用回调方法替换Fragments时出错

时间:2016-02-24 18:43:40

标签: android android-fragments fragmenttransaction

您好我正在尝试通过实现回调方法onButtonPressed()来替换片段(在抽屉布局中的左侧抽屉中),但是当我点击时没有替换发生,任何人都可以找到我做错的地方。这是我的代码< / p>

MainActivity

    public class MainActivity extends AppCompatActivity
            implements DrawerFragmentHome.OnFragmentInteractionListener {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);


            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.setDrawerListener(toggle);
            toggle.syncState();
            if (findViewById(R.id.drawer_fragment_container) != null) {
                if (savedInstanceState != null) {
                    return;
                }
                DrawerFragmentHome drawerFragmentHome = new DrawerFragmentHome();
                getSupportFragmentManager().beginTransaction().add(R.id.drawer_fragment_container, drawerFragmentHome).commit();
            }

        }

        @Override
        public void onBackPressed() {
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                super.onBackPressed();
            }
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();

            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }

            return super.onOptionsItemSelected(item);
        }

        public void onFragmentInteraction(int position) {

            DrawerFragment drawerFragment = new DrawerFragment();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.drawer_fragment_container, drawerFragment);
            transaction.addToBackStack(null);
            transaction.commit();

        }
    }

更换前的碎片(应该更换)

    public class DrawerFragmentHome extends Fragment {

        private OnFragmentInteractionListener mListener;

        public DrawerFragmentHome() {
            // Required empty public constructor
        }
        String[] drawerList = {"A", "B", "C", "D"};


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            List<String> listItems = new ArrayList<>(Arrays.asList(drawerList));
            ArrayAdapter<String> listItemsAdapter = new ArrayAdapter<>(getActivity(), R.layout.drawer_list_item, R.id.drawer_list_item, listItems);

            View view =  inflater.inflate(R.layout.fragment_drawer_fragment_home, container, false);
            ListView listView = (ListView) view.findViewById(R.id.drawer_list_home);
            listView.setAdapter(listItemsAdapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    onButtonPressed(position);
                }
            });
            return view;
        }

        // TODO: Rename method, update argument and hook method into UI event
        public void onButtonPressed(int position) {
            if (mListener != null) {
                mListener.onFragmentInteraction(position);
            }
        }

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            if (context instanceof OnFragmentInteractionListener) {
                mListener = (OnFragmentInteractionListener) context;
            } else {
                throw new RuntimeException(context.toString()
                        + " must implement OnFragmentInteractionListener");
            }
        }

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

        /**
         * This interface must be implemented by activities that contain this
         * fragment to allow an interaction in this fragment to be communicated
         * to the activity and potentially other fragments contained in that
         * activity.
         * <p/>
         * See the Android Training lesson <a href=
         * "http://developer.android.com/training/basics/fragments/communicating.html"
         * >Communicating with Other Fragments</a> for more information.
         */
        public interface OnFragmentInteractionListener {
            // TODO: Update argument type and name
            void onFragmentInteraction(int position);
        }
    }

这个应该是替换后的新片段

    public class DrawerFragment extends Fragment {


        String[] drawerList = {"AA", "BB", "CC", "DD"};

        public DrawerFragment() {
            // Required empty public constructor
        }


        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment


            List<String> listItems = new ArrayList<>(Arrays.asList(drawerList));
            ArrayAdapter<String> listItemsAdapter = new ArrayAdapter<>(getActivity(), R.layout.drawer_list_item, R.id.drawer_list_item, listItems);

            View view = inflater.inflate(R.layout.drawer_fragment, container, false);
            ListView listView = (ListView) view.findViewById(R.id.drawer_list);
            listView.setAdapter(listItemsAdapter);
    //
    //
    //        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    //            @Override
    //            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //                onItemClicked(position);
    //            }
    //        });

            return view;

        }

    }

0 个答案:

没有答案