您好我正在尝试通过实现回调方法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;
}
}