2013-10-08 4 views
6

Ich versuche, ein DialogFragment aus meiner Fragment-Klasse aufzurufen. Ich habe ein ImageView und möchte meine DialogFragment-Klasse im onClickListener des ImageView aufrufen, das ich eingerichtet habe.Aufruf von DialogFragment aus Fragment

Ich erhalte einen Fehler im onClick mit dem Code, den ich eingerichtet habe, um das DialogFragment aufzurufen.

Ich bekomme einen Fehler auf "show" mit der Aussage "Die Methode show (FragmentManager, String) im Typ DialogFragment ist nicht anwendbar für die Argumente (FragmentManager, String)" und ein Fehler auf "new Instance" mit "The Verfahren newInstance() ist nicht definiert für den Typ MyDialogFragment“

Hier ist mein Code:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) 
{ 
    final View v = inflater.inflate(R.layout.image_detail_fragment, 
     container, false); 

    mImageView = (RecyclingImageView) v.findViewById(R.id.imageView); 
    mImageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      //Here 
      MyDialogFragment dialog = MyDialogFragment.newInstance(); 
      dialog.show(getFragmentManager(), "fragmentDialog"); 
     } 
    }); 

    return v; 
} 

DialogFragment Klasse:

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.os.Bundle; 

class MyDialogFragment extends DialogFragment { 

    Context mContext; 

    public MyDialogFragment() { 
     mContext = getActivity(); 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext); 
     alertDialogBuilder.setTitle("Set Wallpaper?"); 
     alertDialogBuilder.setMessage("Are you sure?"); 
     //null should be your on click listener 
     alertDialogBuilder.setPositiveButton("OK", null); 
     alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 

     return alertDialogBuilder.create(); 
    } 

    public static MyDialogFragment newInstance() { 
     MyDialogFragment = new MyDialogFragment; 
     return f; 
    } 
} 
+1

Logcat bitte hinzufügen. – Aleksandr

+1

Und ich kann Ihre statische Methode nicht sehen MyDialogFragment.newInstance() – Aleksandr

Antwort

6

Sie d o keine statische Methode mit dem Namen newInstance. Fügen Sie die unten im Dialog Fragment

public static MyDialogFragment newInstance() { 
    MyDialogFragment f = new MyDialogFragment(); 
    return f; 
    } 

Sie können weitere Informationen und ein Beispiel in der Dokumentation

finden

http://developer.android.com/reference/android/app/DialogFragment.html

+0

Ich bekomme den Fehler auf "MyDialogFragment" sagen "MyDialogFragment kann nicht in eine Variable aufgelöst werden" und "f kann nicht in eine Variable aufgelöst werden". Ich habe meinen Code aktualisiert, damit Sie sehen können, wie er aussieht. – Jack

+2

Seien Sie aufmerksam! öffentliche statische MyDialogFragment newInstance() { MyDialogFragment f = neue MyDialogFragment(); Rückkehr f; } – Aleksandr

+0

@Aleksandr danke korrigiert es. Tippfehler. – Raghunandan

0

Und Sie auch MyDialogFragment ohne newInstance Verfahren wie

DialogFragment newFragment = new MyDialogFragment(this); 
newFragment.show(getFragmentManager(), "date_picker"); 
nennen