2017-03-13 159 views
0

我已經擴展fragmentActivity類,據我所知onCreateView在fragmentActivity的生命週期中可用,但它不應該調用超類,但它給我錯誤@override問我調用父類onCreateView()方法要求超級類呼叫

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     checkLocationPermission(); 
    } 
    // Initializing 
    MarkerPoints = new ArrayList<>(); 

    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 

} 

@Override --> error Here 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.activity_maps, 
      container, false); 
    Button button = (Button) view.findViewById(R.id.reportButton); 
    button.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Toast.makeText(getApplicationContext(),"Report Button Works",Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    return view; 
} 
+0

什麼是錯誤?登錄? IDE? –

回答

0

FragmentActivity實際上並沒有一種稱爲onCreateView(LayoutInflater, ViewGroup, Bundle),我覺得你有Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle),其默認的實現只有在這種情況下,你實際上並不需要調用返回null它混淆超級方法。

FragmentActivity可以作爲支持庫提供的Fragments的主機(常規Activity只能主機android.app.Fragment)。在您的代碼中,您使用延伸FragmentSupportMapFragment,並覆蓋Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle)以將其視圖提供給託管活動。

對於某個活動,您通常只需在致電setContentView後在onCreate中設置您的按鈕點擊偵聽器。

+0

其在這裏給出https://developer.android.com/reference/android/support/v4/app/FragmentActivity.html –

+0

編輯答案更清晰 – Zharf

+0

反正我可以使用onCreateView()?實際上我試圖在Fragment中聽按鈕事件,新的android開發 –

1
@Override 
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { 
    return super.onCreateView(parent, name, context, attrs); 
} 

@Override --> error Here 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) 

您需要在片段;

第1步 - 您需要創建一個片段。

公共類ExampleFragment延伸片段{

@Override 
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 

    //Create the view from XML layout. 
    final View view = inflater.inflate(R.layout.fragment_example, null); 

    //Perform additional configuration on layout components here. 

    return view; 
    } 

}

步驟2 - 創建片段:

public class Fragment1 extends Fragment{ 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.YOUR_LAYOUT, container, false); 
}} 

步驟3 - 創建FragmentPagerAdapter 公共類PagerAdapter延伸FragmentPagerAdapter {

private List<Fragment> fragmentList; 
private Fragment1 fragment1; 
public PagerAdapter(FragmentManager fm) { 
    super(fm); 

    this.fragment1 = new Fragment1(); 

    this.fragmentList = new ArrayList<>(); 
    this.fragmentList.add(this.fragment1); 
} 

@Override 
public Fragment getItem(int position) { 
    //Get fragment in list position 
    return fragmentList.get(position); 
} 

@Override 
public int getCount() { 
    //return size of fragments list. 
    return fragmentList.size(); 
}} 

步驟4 - 添加FragmentPagerAdapter在FragmentActivity:

this._viewPager.setAdapter(new PagerAdapter(this.getSupportFragmentManager())) 
+0

你能解釋一下需要傳遞的參數嗎? –

+0

你需要你的碎片!我將編輯我的答案 –

+0

ready,看看:DD –

0

FragmentActivity是用來裝一個Fragment之前API 3.0。如果您在Honeycomb之前定位應用,那麼您應該使用FragmentActivity,但如果您在Honeycomb之後定位了應用,則應該使用Activity。請記住,在FragmentActivity持有一個Fragment,這意味着你應該附上Fragment和呼叫OnCreateView()等對Fragment而不是FragmentActivity片段的方法。 附上FragmentFragmentActivity的方式是

android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.add(CONTENT_VIEW_ID, myFragment).commit(); 

看看這個優秀的SO文章,解釋FragmentActivityFragments你之間 Difference between Fragment And FragmentActivity

+0

儘管FragmentActivity確實爲早期的Android版本帶來了Fragment支持,但它(和其他支持庫的東西)也爲更新的版本帶來了許多修補程序和新功能,例如嵌套的片段android版本。無論您的Android版本的目標是什麼,通常只需使用支持庫版本即可。 – Zharf

0

的差異應儘量覆蓋的onCreate和保護公衆改變它。 另外,要麼擺脫setContentView(R.layout.activity_maps);或將其更改爲getActivity()。setContentView(R.layout.about_main_layout);

setContentView不可用只在一個片段Activity的java它必須有getActivity()。在它前面。

另外,你需要一個空白的公共構造函數,它的要求,public BlankFragment() { // Required empty public constructor }

最後,據我所知,onCreateView是好的,它就是我們的周圍,所以請考慮上述posibilites。

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
getActivity().setContentView(R.layout.about_main_layout); 

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    checkLocationPermission(); 
} 
// Initializing 
MarkerPoints = new ArrayList<>(); 

// Obtain the SupportMapFragment and get notified when the map is ready to be used. 
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
     .findFragmentById(R.id.map); 
mapFragment.getMapAsync(this); }