2013-04-13 7 views
12

में एंड्रॉइड findViewById मैं एक डेटपिकर विकसित करने की कोशिश कर रहा हूं जो सेट करते समय टेक्स्टव्यू के मान को सेट करता है।डायलॉगफ्रैगमेंट

लेकिन मैं डायलॉग फ्रैगमेंट से टीवी का चयन नहीं कर सकता जो डेटपिकर को संभालता है।

मैंने getView() की कोशिश की लेकिन एप्लिकेशन विशिष्ट बिंदु पर क्रैश हो गया।

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

}

धन्यवाद, किसी भी मदद की सराहना की जाएगी:

यहाँ मेरी कोड है।

नए कोड और निम्न त्रुटि के साथ अपडेट किया गया:

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

क्या कोई अन्य टुकड़ा में 'टीवीडेट' है? – Sam

+0

tvDate एक गतिविधि के अंदर है –

+1

कृपया इस धागे पर मेरा उत्तर जांचें। http://stackoverflow.com/questions/16507016/findviewbyid-in-dialogfragment-nullpointerexception/29291399#29291399 चीयर्स! – noahutz

उत्तर

21

आप onCreateView() का उपयोग करना चाहिए टुकड़ा/टुकड़ा संवाद में एक विशेष दृश्य प्राप्त करने के लिए। यहाँ एक उदाहरण है कि कैसे करने के लिए है:

@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; 
} 

चेक पहले अगर onCreateDialog()onCreateView() से पहले कहा जाता है और यह है कि अगर सच कुछ इस तरह उपयोग करने का प्रयास है:

@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

मैंने कोशिश की, लेकिन अब जब यह डेटपिकर लोड करना शुरू होता है तो एप्लिकेशन क्रैश हो जाता है। –

+0

अपने उत्तर का उपयोग जिस तरीके से आप कर रहे हैं और क्रैश – hardartcore

+0

ठीक है, कोड और त्रुटि के साथ अपडेट किया गया है। –

1

में विचारों को खोजने के लिए और अधिक आसान तरीका नहीं है DialogFragment।

@Override 
public void onStart() { 
    super.onStart(); 
    mTextView = (TextView) getDialog().findViewById(R.id.tvDate); 
} 
संबंधित मुद्दे