2017-03-13 2 views
0

Ich habe die fragmentActivity-Klasse erweitert, soweit ich onCreateView gelesen habe, ist im Lebenszyklus von fragmentActivity verfügbar, aber es sollte nicht Superklasse aufrufen, aber es gibt mir einen Fehler in @override fragt mich Superklasse zu nennenonCreateView() -Methode fragt nach Super-Klassenaufruf

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

Was ist der Fehler? Log? IDE? –

Antwort

0

FragmentActivity eigentlich keine Methode onCreateView(LayoutInflater, ViewGroup, Bundle) genannt haben, ich glaube, Sie verwechseln es mit Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle), für die die Standardimplementierung nur null zurück, in dem Fall, dass Sie eigentlich gar nicht zu nennen brauchen die super Methode.

FragmentActivity für Fragments als Host fungieren von der Support-Bibliothek zur Verfügung gestellt (regelmäßige Activity kann nur android.app.Fragment Host). In Ihrem Code verwenden Sie die SupportMapFragment, die Fragment erweitert und überschreibt Fragment.onCreateView(LayoutInflater, ViewGroup, Bundle), um seine Sicht auf die Hosting-Aktivität bereitzustellen.

Für eine Aktivität würden Sie in der Regel nur Ihre Schaltfläche klicken Sie auf Listener in onCreate nach dem Aufruf setContentView.

+0

seine hier https://developer.android.com/reference/android/support/v4/app/FragmentActivity.html –

+0

editierte Antwort, um klarer zu sein – Zharf

+0

sowieso kann ich onCreateView() ?? eigentlich versuche ich Button Ereignisse in Fragment zu hören, neu in Android-Entwicklung –

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

Nicht

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

Sie benötigen Sie Fragmente;

Schritt 1 - Sie müssen ein Fragment erstellen.

public class ExampleFragment erweitert Fragment {

@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; 
    } 

}

Schritt 2 - Fragment erstellen:

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); 
}} 

Schritt 3 - Erstellen FragmentPagerAdapter public class PagerAdapter erstreckt 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(); 
}} 

Schritt 4 - Hinzufügen FragmentPagerAdapter in Ihrem FragmentActivity:

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

Können Sie die Parameter erklären, die übergeben werden müssen, damit es funktioniert? –

+0

Du brauchst Fragmente! Ich werde meine Antwort bearbeiten –

+0

bereit, schauen: DD –

0

FragmentActivity verwendet wird, eine Fragment vor API 3.0 zu halten. Wenn Sie eine App vor Honeycomb targetieren, sollten Sie FragmentActivity verwenden. Wenn Sie jedoch eine App nach Honeycomb ausrichten, sollten Sie eine Activity verwenden. Und denken Sie daran, dass die FragmentActivityhält eine Fragment, was bedeutet, dass Sie eine Fragment anhängen sollte und rufen OnCreateView() und andere Fragment Methoden auf dem Fragment und nicht auf FragmentActivity. Die Art und Weise eine Fragment-FragmentActivity ist

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

Schauen Sie sich diese hervorragende SO Post erklären den Unterschied zwischen FragmentActivity und Fragments Difference between Fragment And FragmentActivity

+0

Während es stimmt, dass FragmentActivity Fragment Unterstützung für frühere Android-Versionen bringt, bringt es (und andere Unterstützung Bibliothek Dinge) auch eine Menge Korrekturen und neue Funktionen, wie verschachtelte Fragmente, für neuere Android-Versionen. Im Allgemeinen ist es besser, Support-Bibliotheksversionen zu verwenden, unabhängig davon, auf welche Android-Version Sie abzielen. – Zharf

0

Sie versuchen onCreate zwingende sollte zu befestigen und sie geschützt zu öffentlichen ändern. Plus, entweder loswerden SetContentView (R.layout.activity_maps); oder ändere es in getActivity(). setContentView (R.layout.about_main_layout);

setContentView ist nicht verfügbar nur in einem Fragment Java-Aktivität der Aktivität getActivity(). vor.

Außerdem müssen Sie einen leeren öffentlichen Konstruktor, es ist erforderlich, public BlankFragment() { // Required empty public constructor }

Schließlich mein Wissen onCreateView in Ordnung ist, es ist das, was um ihn herum ist, so bitte die oben posibilites betrachten.

@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); } 
Verwandte Themen