Android SDK中DatePickerFragment和TextView中 [英] Android Sdk DatePickerFragment and TextView

查看:160
本文介绍了Android SDK中DatePickerFragment和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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆