2013-03-17 26 views
5

Moja klasa powinna przekazać argument do DialogFragment, ale moja aplikacja zawiesza się w metodzie onCreate (klasy okna dialogowego) dla wyjątku NullPointerException. Dialog fragment klasa część kodu:Argument DialogFragment i wyjątek nullpointer

public class ConfirmDialog extends DialogFragment { 

public ConfirmDialog() {} 

ConfirmDialog newInstance(String f) { 
    ConfirmDialog d = new ConfirmDialog(); 

    Bundle args = new Bundle(); 
    args.putString("FILE_NAME", f); 
    d.setArguments(args); 

    return d; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    file = getArguments().getString("FILE_NAME"); 
} 

mam NullPointer na tej linii:

file = getArguments().getString("FILE_NAME"); 

I nie wiem dlaczego. ja też wkleić kod wywołuje dialogowe

private void showConfirmDialog(String file) { 
    FragmentManager fm = getSupportFragmentManager(); 
    ConfirmDialog dialog = new ConfirmDialog(); 
    Log.i("SHOWFILEACTIVITY", file); 
    dialog.newInstance(file); 
    dialog.show(fm, "fragment_confirm_dialog"); 
} 

tutaj „plik” ciąg nie jest zerowa, mam to sprawdzić z

Log.i("SHOWFILEACTIVITY", file); 

Odpowiedz

6

tworzysz ConfirmDialog przez konstruktora, a następnie wywołanie newInstance(), które tworzy kolejne (właściwe) ConfirmDialog. Jednak odrzuć tę właściwą instancję.

Aby rozwiązać ten problem:

Twoja metoda newInstance() powinna być statyczna:

public static ConfirmDialog newInstance(String f) { 
    ConfirmDialog d = new ConfirmDialog(); 

    Bundle args = new Bundle(); 
    args.putString("FILE_NAME", f); 
    d.setArguments(args); 

    return d; 
} 

I showConfirmDialog() powinien zostać zmieniony tak, że stosuje metodę newInstance() prawidłowo.

private void showConfirmDialog(String file) { 
    FragmentManager fm = getSupportFragmentManager(); 
    Log.i("SHOWFILEACTIVITY", file); 

    ConfirmDialog dialog = ConfirmDialog.newInstance(file); 
    dialog.show(fm, "fragment_confirm_dialog"); 
} 
+0

ok dzięki, to działa. Nigdy nie użyłem funkcji newInstance i popełniłem błąd! ale dlaczego newInstance powinno być statyczne? – giozh

+1

@giozh, ponieważ chcemy utworzyć "nową" instancję okna dialogowego, to złe podejście do projektowania polegać na * już stworzonej * instancji okna dialogowego. Utrzymanie metody statycznej usuwa zależności i powoduje mniejsze tworzenie obiektów. –

Powiązane problemy