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