標籤:多態 class api
在看法中用到的Fragment在類型轉換的時候很容易出現這種問題:
對比代碼:
class MyFragmentPagerAdapter extends FragmentPagerAdapter{public MyFragmentPagerAdapter(FragmentManager fm) {super(fm);// TODO Auto-generated constructor stub}@Overridepublic Fragment getItem(int arg0) {// TODO Auto-generated method stubFragment ft = null;switch (arg0) {case 0:ft = new MainPaperFragment();break;default:break;}return ft;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn MainActivity.this.tabTitle.length;}}
與:
import android.support.v4.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.example.kuhua.R;public class MainPaperFragment extends Fragment {@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView MainPaperFragmentView = inflater.inflate(R.layout.mainpaperfragmentview, container,false);return MainPaperFragmentView;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onActivityCreated(savedInstanceState);}}
在上述fragment中 Fragment ft = new MainPaperFragment()本質上沒有錯,是一種多態,但是一般開發中總容易報錯;原因當然在自己,我們在用Fragment的時候大體上知道是匯入的import android.support.v4.app.Fragment但是在自訂Fragment的時候容易直接用了系統的import android.app.Fragment這樣就造成了所使用的api不一致。解決的方法就是記得全部都用匯入的import android.support.v4.app.Fragment就ok了!
android.app.Fragment與android.support.v4.app.Fragment不一致