1. 程式人生 > >Android中如何在Fragment中新增點選事件切換新的Fragment

Android中如何在Fragment中新增點選事件切換新的Fragment

此問題是我在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的切換。