Android中如何在Fragment中新增點選事件切換新的Fragment
阿新 • • 發佈:2019-02-13
此問題是我在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的切換。