Android 用回调方法替换片段时出错

Android 用回调方法替换片段时出错,android,android-fragments,fragmenttransaction,Android,Android Fragments,Fragmenttransaction,嗨,我正试图通过实现回调方法onButtonPressed()来替换片段(在抽屉布局中的leftdrawer中),但是当我单击时,没有替换发生,任何人都可以找到我出错的地方。这是我的代码 主要活动 public class MainActivity extends AppCompatActivity implements DrawerFragmentHome.OnFragmentInteractionListener { @Override

嗨,我正试图通过实现回调方法onButtonPressed()来替换片段(在抽屉布局中的leftdrawer中),但是当我单击时,没有替换发生,任何人都可以找到我出错的地方。这是我的代码

主要活动

    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类DrawerFragmentHome扩展片段{
私有OnFragmentInteractionListener mListener;
公众付款人{
//必需的空公共构造函数
}
字符串[]抽屉列表={“A”、“B”、“C”、“D”};
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
List listItems=新的ArrayList(Arrays.asList(抽屉列表));
ArrayAdapter listItemsAdapter=新的ArrayAdapter(getActivity(),R.layout.drawer\u list\u项,R.id.drawer\u list\u项,listItems);
视图=充气机。充气(R.layout.fragment\u drawer\u fragment\u home,container,false);
ListView ListView=(ListView)view.findViewById(R.id.drawer\u list\u home);
setAdapter(listItemsAdapter);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
按下ON按钮(位置);
}
});
返回视图;
}
//TODO:重命名方法、更新参数并将方法挂接到UI事件中
按下公共无效按钮(内部位置){
if(mListener!=null){
mListener.onFragmentInteraction(位置);
}
}
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
if(OnFragmentInteractionListener的上下文实例){
mListener=(OnFragmentInteractionListener)上下文;
}否则{
抛出新的RuntimeException(context.toString()
+“必须实现OnFragmentInteractionListener”);
}
}
@凌驾
公共无效连接(){
super.onDetach();
mListener=null;
}
/**
*此接口必须由包含以下内容的活动实现
*片段,以允许通信此片段中的交互
*该活动以及其中可能包含的其他片段
*活动。
*

*有关更多信息,请参阅Android培训课程。 */ FragmentInteractionListener上的公共接口{ //TODO:更新参数类型和名称 碎片交互作用无效(内部位置); } }

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

    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;

        }

    }
公共类抽屉片段扩展片段{
字符串[]抽屉列表={“AA”、“BB”、“CC”、“DD”};
公共抽屉碎片(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
List listItems=新的ArrayList(Arrays.asList(抽屉列表));
ArrayAdapter listItemsAdapter=新的ArrayAdapter(getActivity(),R.layout.drawer\u list\u项,R.id.drawer\u list\u项,listItems);
视图=充气机。充气(R.layout.drawer\u碎片,容器,假);
ListView ListView=(ListView)view.findViewById(R.id.drawer\u list);
setAdapter(listItemsAdapter);
//
//
//setOnItemClickListener(新的AdapterView.OnItemClickListener(){
//@覆盖
//public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//单击(位置);
//            }
//        });
返回视图;
}
}

我认为onItemclickListener在第一个片段中不工作。有人可以帮助我认为onItemclickListener在第一个片段中不工作。有人可以帮助吗
    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;

        }

    }