此问题是我在Android开发中遇到,因为自己在网上一直没有找到好的方法,后来摸爬滚打解决后,打算分享给大家。
首先,在遇到该问题时,我先默认读者已经对Android开发中Fragment的使用已经有了一定的了解。
因为在fragment中无法使用FragmentManager、FragmentTransaction两个方法,只能在创建Fragment的活动类里调用的缘故,我在Fragment中创建点击事件切换到新Fragment遇到了困难。
而且在动态添加Fragment时,直接在活动类中监听按钮会找不到相应的id,所以监听只能放在相应的Fragment类中,如下面的代码。
public class ChantFragment extends Fragment{
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_chant, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//创建点击事件
Button button = (Button) getActivity().findViewById(R.id.button_chant);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity activity = (MainActivity) getActivity();
activity.setChantEssayFragment();
}
});
}
}
注意,我的监听事件在监听到相应按钮时的代码,MainActivity activity = (MainActivity) getActivity(); 帮助我们获取到当前的活动类,然后通过activity.setChantEssayFragment(); 调用活动类中的方法。活动类中的方法请看下面的代码。
public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
//...//
}
public void setChantEssayFragment() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
transaction.replace(R.id.layFrame, ChantEssayFragment.newInstance());
transaction.addToBackStack(null);
transaction.commit();
}
}
这样我们就成功在fragment中完成了fragment的切换。