2013-04-13 10 views
12

Ich versuche, einen Datepicker zu entwickeln, der den Wert einer Textansicht setzt, wenn festgelegt.Android findViewById in DialogFragment

Aber ich kann den Fernseher nicht aus dem DialogFragment auswählen, das den Datepicker verarbeitet.

Ich versuchte getView(), aber die Anwendung stürzt an dem bestimmten Punkt ab.

Hier ist mein Code:

import java.util.Calendar; 

import android.annotation.SuppressLint; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.DatePicker; 
import android.widget.TextView; 

@SuppressLint("NewApi") 
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

TextView mTextView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

      // R.layout.my_layout - that's the layout where your textview is placed 
    View view = inflater.inflate(R.layout.activity_register_screen, container, false); 
    mTextView = (TextView) view.findViewById(R.id.tvDate); 
    // you can use your textview. 
    return view; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the current date as the default date in the picker 
    final Calendar c = Calendar.getInstance(); 
    int year = c.get(Calendar.YEAR); 
    int month = c.get(Calendar.MONTH); 
    int day = c.get(Calendar.DAY_OF_MONTH); 

    // Create a new instance of DatePickerDialog and return it 
    return new DatePickerDialog(getActivity(), this, year, month, day); 
} 

public void onDateSet(DatePicker view, int year, int month, int day) { 
    int syear = year; 
    int smonth = month; 
    int sday = day; 
    // set selected date into textview 
    mTextView.setText(new StringBuilder().append(smonth + 1) 
     .append("-").append(sday).append("-").append(syear) 
     .append(" ")); 
} 

}

Danke, wird jede Hilfe dankbar.

04-15 09:45:30.880: E/AndroidRuntime(23016): FATAL EXCEPTION: main 
04-15 09:45:30.880: E/AndroidRuntime(23016): android.util.AndroidRuntimeException: requestFeature() must be called before adding content 
04-15 09:45:30.880: E/AndroidRuntime(23016): at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:239) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at com.android.internal.app.AlertController.installContent(AlertController.java:236) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.AlertDialog.onCreate(AlertDialog.java:336) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.Dialog.dispatchOnCreate(Dialog.java:353) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.Dialog.show(Dialog.java:257) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.DialogFragment.onStart(DialogFragment.java:490) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.Fragment.performStart(Fragment.java:1537) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:866) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1036) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.BackStackRecord.run(BackStackRecord.java:622) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1386) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:430) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.os.Handler.handleCallback(Handler.java:605) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.os.Looper.loop(Looper.java:137) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at android.app.ActivityThread.main(ActivityThread.java:4517) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at java.lang.reflect.Method.invoke(Method.java:511) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
04-15 09:45:30.880: E/AndroidRuntime(23016): at dalvik.system.NativeStart.main(Native Method) 

+0

Ist 'tvDate' in einem anderen Fragment? – Sam

+0

tvDate ist in einer Aktivität –

+1

Bitte überprüfen Sie meine Antwort auf diesen Thread. http://stackoverflow.com/questions/16507016/findviewbyid-in-dialogfragment-nullpointerexception/29291399#29291399 Prost! – noahutz

Antwort

21

eine bestimmte Ansicht Um in Fragmente/Fragment Dialog GELÖST Sie onCreateView() verwenden sollen:

mit neuem Code und dem folgenden Fehler aktualisiert. Hier ist ein Beispiel, wie man das:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // R.layout.my_layout - that's the layout where your textview is placed 
    View view = inflater.inflate(R.layout.my_layout, container, false); 
    TextView mTextView = (TextView) view.findViewById(R.id.colors); 
    // you can use your textview. 
    return view; 
} 

prüft zuerst, ob onCreateDialog() vor onCreateView() aufgerufen wird und wenn das stimmt versucht so etwas wie dies mit:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the Builder class for convenient dialog construction 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    LayoutInflater inflater = getActivity().getLayoutInflater(); 
    View view = inflater.inflate(R.layout. activity_register_screen, null); 
    builder.setView(view); 
    // Create the AlertDialog object and return it 
    return builder.create(); 
} 
+0

Ich habe das versucht, aber jetzt stürzt die Anwendung ab, wenn es beginnt, den Datepicker zu laden. –

+0

aktualisieren Sie Ihre Antwort mit der Art, wie Sie es verwenden und den Absturz – hardartcore

+0

ok, mit Code und Fehler aktualisiert. –

1

Es ist einfacher Art und Weise Ansichten zu finden in DialogFragment.

@Override 
public void onStart() { 
    super.onStart(); 
    mTextView = (TextView) getDialog().findViewById(R.id.tvDate); 
}