Android SDK中DatePickerFragment和TextView中 [英] Android Sdk DatePickerFragment and TextView
问题描述
我得到了下一个问题。我想通过我用所输入的日期我的 DatePickerFragment
到的TextView
,但我不知道我能真正做到这一点。
当我创建 DatePickerFragment
类的TextView
对象,然后使用设定的文本将 onDateSet
方法 - 应用程序崩溃。也许这个问题太简单,但是我没有找到合适的解决方案。
公共类DatePickerFragment扩展DialogFragment
实现DatePickerDialog.OnDateSetListener {
TextView的tvDate1 =(TextView中)getView()findViewByiD(R.id.tvDate)。
@覆盖
公共对话onCreateDialog(包savedInstanceState){
最后的日历C = Calendar.getInstance();
INT年= c.get(Calendar.YEAR);
INT月= c.get(Calendar.MONTH);
INT天= c.get(Calendar.DAY_OF_MONTH);
返回新DatePickerDialog(getActivity(),这,年,月,日);
}
公共无效onDateSet(DatePicker的观点,年整型,INT月,日整型){
串
StringBuilder的SB =新的StringBuilder();
sb.append(天);
sb.append(/);
sb.append(月);
sb.append(/);
sb.append(一年);
tvDate1.setText(某人);
}
}
也正因为如此
您的应用程序崩溃的可能。
TextView的tvDate1 =(TextView中)getView()findViewByiD(R.id.tvDate)。
我猜你的选择器在不同的文件,你正在试图初始化的TextView。 findViewById
是活动类的方法
使用一个接口
http://developer.android.com/guide/components/fragments.html
检查下与交流活动的主题
公共类DatePickerFragment扩展DialogFragment
实现DatePickerDialog.OnDateSetListener {
TheListener监听;
公共接口TheListener {
公共无效returnDate(字符串日期);
}
@覆盖
公共对话onCreateDialog(包savedInstanceState){
//使用当前日期作为选择器的默认日期
最后的日历C = Calendar.getInstance();
INT年= c.get(Calendar.YEAR);
INT月= c.get(Calendar.MONTH);
INT天= c.get(Calendar.DAY_OF_MONTH);
听者=(TheListener)getActivity();
//创建DatePickerDialog的新实例,并将其返回
返回新DatePickerDialog(getActivity(),这,年,月,日);
}
@覆盖
公共无效onDateSet(DatePicker的观点,年整型,INT月,日整型){
日历C = Calendar.getInstance();
c.set(年,月,日);
SimpleDateFormat的SDF =新的SimpleDateFormat(YYYY-MM-DD);
串formattedDate = sdf.format(c.getTime());
如果(听众!= NULL)
{
listener.returnDate(formattedDate);
}
}
}
然后在MainActivity实现接口,并设置日期的TextView
公共类MainActivity扩展活动实现DatePickerFragment.TheListener {
按钮B;
TextView的电视;
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
B =(按钮)findViewById(R.id.button1);
电视=(TextView中)findViewById(R.id.textView1);
b.setOnClickListener(新OnClickListener()
{
@覆盖
公共无效的onClick(查看为arg0){
// TODO自动生成方法存根
DialogFragment选择器=新DatePickerFragment();
picker.show(getFragmentManager(),日期选择器);
}
});
}
@覆盖
公共无效returnDate(字符串日期){
// TODO自动生成方法存根
tv.setText(日期);
}
}
i got the next problem. I want to pass the date i've entered using my DatePickerFragment
to TextView
, but i don't know how i can actually do it.
When i create TextView
object in DatePickerFragment
class and then set the text in it using onDateSet
method - the app crashes. Maybe this question too basic, but i didn' find any suitable solution.
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);
}
}
Your app crashed probably because of this
TextView tvDate1 = (TextView) getView().findViewByiD(R.id.tvDate);
I guess your picker is in a different file and you are trying to initialize textview. findViewById
is a method of activity class
Use a interface
http://developer.android.com/guide/components/fragments.html
Check the topic under communicating with activity
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);
}
}
}
Then in MainActivity implement the interface and set the date to 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);
}
}
这篇关于Android SDK中DatePickerFragment和TextView中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!