2012-11-01 11 views
30

Ich erhalte einen FehlerIch erhalte eine Fehlermeldung "die Show-Methode (FragmentManager, String)"

Die Methode show(FragmentManager, String) in der Art DialogFragment ist für die Argumente nicht anwendbar (FragmentManager, String)

package com.example.test1; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.support.v4.app.DialogFragment; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentActivity; 

public class MainActivity extends Activity { 

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

    public void click(View view) { 
     DialogFragment newFragment = new FireMissilesDialogFragment(); 
     newFragment.show(getFragmentManager(), "missiles"); 
    } 

    public boolean onCreateOtionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

Antwort

46

Wie Sie android.support.v4.app.DialogFragment verwenden, sollten Sie auf show() eine Instanz android.support.v4.app.FragmentManager geben, die unter Verwendung eines getSupportFragmentManager() Anruf abgefragt werden können. Hoffe das hilft.

+1

Nein. Ich benutze es auch. Habe aber immer noch ein Problem. – Vinuthan

+0

Noch eine Frage, selbst nach dem Hinzufügen von Support-APIs sieht meine App immer noch nicht wie die Version 4.0 App aus. Sieht immer noch aus wie Lebkuchen, die mein Telefon hat. Gibt es noch etwas, was ich tun muss? – Vinuthan

+0

@ user1767451 wird Support-Bibliothek entwickelt, um Entwickler neue APIs auf älteren Android-Versionen verwenden zu lassen, nicht für die Herstellung der Anwendung auf allen API-Versionen gleich aussehen. – Egor

8

sollten Sie android.support.v4.app.FragmentManager statt android.app.FragmentManager verwenden.

Dann sollten Sie getSupportFragmentManager() nennen, aber nicht getFragmentManager()

+1

Dank funktioniert für mich –

27

Das Problem ist, weil Sie mit der FragmentManager des Support-Paket werden müssen, aber Sie werden mit dem nativen FragmentManager wenn Sie getFragmentManager() aufrufen. Versuchen Sie getSupportFragmentManager() aufzurufen, wenn Sie Ihre Variable fm initialisieren

Sie müssen auch sicherstellen, dass Sie DialogFragment aus dem Support-Paket und nicht aus dem nativen Paket enthalten.

Sie können durch den Import tun,

import android.support.v4.app.DialogFragment; 
+0

Dank verstehen können, die geholfen haben! –

18

Auch hatte ich das gleiche Problem, wenn Sie den Code in Lebkuchen läuft. Aber funktioniert gut für ICS. Die Lösung ist,

statt dessen:

public class MainActivity extends Activity { 
} 

Einsatz erstreckt FragmentActivty

public class MainActivity extends FragmentActivity { 
} 
+0

Das war die Lösung für mich! Vielen Dank! –

3

ich diese bekam, als eine DialogFragment sogar öffnen, obwohl ich nicht android.support.v4.app.DialogFragment verwendet wurde. Ich musste getActivity().getFragmentManager() anrufen, weil getSupportFragmentManager() nicht funktionierte.

2
public void onClick(View v) { 

    switch (v.getId()) { 
    case R.id.btnselectDate: 
     DialogFragment newFragment = new DatePickerFragment(); 
     newFragment.show(this.getFragmentManager(), "datePicker"); 
     break; 

     default: 
     break; 
    } 
} 
Verwandte Themen