此问题是我在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的切换。