Android Sdk DatePickerFragment和TextView

我遇到了下一个问题。 我想将我使用DatePickerFragment输入的日期传递给TextView ,但我不知道我是怎么做到的。

当我在DatePickerFragment类中创建TextView对象,然后使用onDateSet方法设置其中的文本时 – 应用程序崩溃。 也许这个问题太基础了,但我找不到任何合适的解决方案。

 public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{ TextView tvDate1 = (TextView) getView().findViewByiD(R.id.tvDate); @Override public Dialog onCreateDialog(Bundle savedInstanceState){ 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); return new DatePickerDialog(getActivity(),this,year,month,day); } public void onDateSet(DatePicker view,int year, int month, int day){ String StringBuilder sb = new StringBuilder(); sb.append(day); sb.append("/"); sb.append(month); sb.append("/"); sb.append(year); tvDate1.setText(sb); } } 

您的应用程序崩溃可能是因为这个原因

  TextView tvDate1 = (TextView) getView().findViewByiD(R.id.tvDate); 

我猜您的选择器位于不同的文件中,您正在尝试初始化textview。 findViewById是一个活动类的方法

使用界面

http://developer.android.com/guide/components/fragments.html

检查与活动通信下的主题

 public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { TheListener listener; public interface TheListener{ public void returnDate(String date); } @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); listener = (TheListener) getActivity(); // Create a new instance of DatePickerDialog and return it return new DatePickerDialog(getActivity(), this, year, month, day); } @Override public void onDateSet(DatePicker view, int year, int month, int day) { Calendar c = Calendar.getInstance(); c.set(year, month, day); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = sdf.format(c.getTime()); if (listener != null) { listener.returnDate(formattedDate); } } } 

然后在MainActivity中实现界面并将日期设置为textview

 public class MainActivity extends Activity implements DatePickerFragment.TheListener{ Button b; TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b= (Button) findViewById(R.id.button1); tv= (TextView) findViewById(R.id.textView1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DialogFragment picker = new DatePickerFragment(); picker.show(getFragmentManager(), "datePicker"); } }); } @Override public void returnDate(String date) { // TODO Auto-generated method stub tv.setText(date); } }