2013-03-17 34 views
5

Sınıfım, DialogFragment öğesine bir argüman iletmelidir, ancak benim app bir NullPointerException için onCreate yöntemi (iletişim kutusunun) içinde çöker. kod Diyalog parçası sınıfı kısmı:DialogFragment argüman ve nullpointer istisnası

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

Bu satırında nullpointer vardır:

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

Ve nedenini bilmiyorum. Ben de kod iletişim İşte

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

"dosyasını" olarak adlandırdığı yapıştırmak dize null değil, ben o zaman,

Log.i("SHOWFILEACTIVITY", file); 

cevap

6

Sen yapıcısı aracılığıyla ConfirmDialog oluştururken ile kontrol ettik Başka bir (uygun) ConfirmDialog yaratan newInstance() numaralı telefonu arıyor. Ancak daha sonra uygun örneği atın.

Bunu düzeltmek için:

Sizin newInstance() yöntem statik olmalıdır: Düzgün newInstance() yöntemini kullanır böylece

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

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

    return d; 
} 

Ve showConfirmDialog() değiştirilmelidir.

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

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

Tamam, teşekkürler. Hiç yeni bir işlev kullanmamıştım ve bir hata yaptım! ama neden yeni bir durum statik olmalı? – giozh

+1

@giozh, Dialog'un “yeni” bir örneğini oluşturmak istediğimizden beri, Diyaloğun * oluşturulmuş bir örneğine güvenmek için kötü bir tasarım yaklaşımıdır. Yöntemi statik tutmak bağımlılıkları ortadan kaldırır ve daha az nesne oluşturma ile sonuçlanır. –

İlgili konular