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