2016-01-01 30 views
6

Ho un CustomDialogFragment come questofinestre di dialogo personalizzate Frammento si blocca quando metodo setter viene chiamato

public class CustomDialogFragment extends DialogFragment { 

    private LinearLayout containerView; 


    public static CustomDialogFragment newInstance() { 
     CustomDialogFragment fragment = new EDActionSheet(); 
     return fragment; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     final Dialog dialog = new Dialog(getActivity()); 
     dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     //MARK - containerView 
     LinearLayout.LayoutParams containerViewLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

     containerView = new LinearLayout(dialog.getContext()); 
     containerView.setLayoutParams(containerViewLayoutParams); 
     containerView.setOrientation(LinearLayout.VERTICAL); 
     dialog.setContentView(containerView); 
     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 

     WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
     params.width = (int) (displaymetrics.widthPixels * 0.95); 
     params.gravity = Gravity.BOTTOM; 
     dialog.getWindow().setAttributes(params); 

     return dialog; 
} 

public void setColor(int color) { 
     containerView.setBackgroundColor(color); 
} 

E da fuori, dove io chiamo il DialogFragment.

CustomDialogFragment fragment = CustomDialogFragment.newInstance(); 
    fragment.setColor(ContextCompat.getColor(this, Color.BLUE)); 
    fragment.show(getFragmentManager(), "Dialog"); 

ho avuto l'incidente dicendo

testapp.android.testapp E/AndroidRuntime: FATAL EXCEPTION: main 
     Process: id.testapp.android.testapp, PID: 5749 
     java.lang.NullPointerException: Attempt to invoke virtual method 'void 
id.testapp.android.testapp.controls.CustomDialogFragment.setColor(int)' 
on a null object reference 
     at 
id.testapp.android.testapp.controls.CustomDialogFragment.setColor(CustomDialogFragment.java:234) 

Qualche idea?

risposta

4

il vostro riferimento containerView non è stato ancora inizializzato. Guarda come deve essere chiamato onCreateDialog() prima che sia inizializzato.

Avrete bisogno di refactoring in uno dei pochi modi. Il modo più semplice sarebbe probabilmente quello di avere il metodo setColor solo per memorizzare una variabile in merito a ciò che 'containerView' dovrebbe impostare lo sfondo anche quando è inizializzato.

+0

Grazie per l'aiuto – JayVDiyk