2013-03-17 21 views
5

La mia classe dovrebbe passare un argomento a DialogFragment, ma la mia app si arresta in modo anomalo all'interno del metodo onCreate (della classe di dialogo) per NullPointerException. Dialog frammento porzione classe di codice:Argomento DialogFragment ed eccezione 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"); 
} 

ho il nullpointer in questa linea:

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

E io non so perché. incollo anche il codice chiama il

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

Qui il "file" finestra stringa non è nulla, ho controllare con

Log.i("SHOWFILEACTIVITY", file); 

risposta

6

si sta creando un ConfirmDialog tramite il costruttore, quindi chiamando newInstance(), che crea un altro (corretto) ConfirmDialog. Tuttavia, si scartare tale istanza corretta.

Per risolvere questo problema:

Il tuo metodo newInstance() dovrebbe essere statico:

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

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

    return d; 
} 

E showConfirmDialog() dovrebbe essere cambiato in modo che utilizza il metodo newInstance() correttamente.

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 grazie, funziona. Non ho mai usato la funzione newInstance e ho fatto un errore! ma perché newInstance dovrebbe essere statico? – giozh

+1

@giozh dal momento che vogliamo creare un'istanza 'new' del Dialog, è un cattivo approccio al design fare affidamento su un'istanza * già creata * del Dialog. Mantenere il metodo statico rimuove le dipendenze e si traduce in una minore creazione di oggetti. –

Problemi correlati