如何使用 DatePickerDialog 从 DialogFragment 设置文本
How to setText from a DialogFragment with DatePickerDialog
我正在构建一个应用程序,您可以在其中使用 DatePickerDialog 选择日期,在您 select 并点击 "Ok" 之后,您选择的日期必须显示在 TextView 中。
我在这样做时遇到了问题,因为我不能只在 DialogFragment 中使用 "setText.mTexView(foo)"...我已经尝试通过构造函数传递 textview 或在片段中获取电视,但我不能',请帮忙。
这是我的代码:
public class PickDate_main extends AppCompatActivity {
EditText tv_fecha;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pickdate_main);
}
public void showDatePickerDialog(View v){//This method is executed from the layout with a button
PickDate_Dialog dialog = new PickDate_Dialog();
FragmentTransaction ft = getFragmentManager().beginTransaction();
dialog.show(ft, "Date pickeerr");
}
}
--
public class PickDate_Dialog extends DialogFragment implements DatePickerDialog.OnDateSetListener{
public PickDate_Dialog(){
}
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 PickDate_Dialog(getActivity(),this,year,month,day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
String date = day + "-"+(month+1)+"-"+year;
//I want to write the string "data", i suppose it must be here
}
}
我相信如果您将 textview 发送到 PickDate_Dialog、保存它并在需要时调用它,它应该可以工作。不过不确定 return new PickDate_Dialog(getActivity(),this,year,month,day);
。
public class PickDate_Dialog extends DialogFragment implements DatePickerDialog.OnDateSetListener{
private EditText dateEditText;
public PickDate_Dialog(EditText et){
dateEditText = et;
}
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);
//Do you have a constructor for this? This is likely your issue
return new PickDate_Dialog(getActivity(),this,year,month,day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
String date = day + "-"+(month+1)+"-"+year;
if (dateEditText != null)
dateEditText.setText(date);
}
}
不过,这里还有一些想法:
选项 1:查看接口。这是一种允许您在 class 之间发送回调的方法(DatePickerDialog.OnDateSetListener 是一个示例)。在对话框中创建一个新界面 class
public interface PickDateInterface {
void onDateSet(String date)
}
为其创建一个变量
私有 PickDateInterface mPDInterface;
并添加到原来的onDateSet
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
String date = day + "-"+(month+1)+"-"+year;
if (mPDInterface != null) {
mPDInterface.onDateSet(date);
}
}
而且你在创建对话框的时候,把这个接口作为参数添加进去,在这个接口里面添加你需要做的事情就可以了。
选项 2:
在您的 activity 中创建一个 public 方法并通过
(([你的 activity 名字])[你的上下文]).你的方法;
您基本上是将上下文投射到 activity 并使用该方法
例子:
((PickDate_main).getContext()).setDateText(date);
我正在构建一个应用程序,您可以在其中使用 DatePickerDialog 选择日期,在您 select 并点击 "Ok" 之后,您选择的日期必须显示在 TextView 中。
我在这样做时遇到了问题,因为我不能只在 DialogFragment 中使用 "setText.mTexView(foo)"...我已经尝试通过构造函数传递 textview 或在片段中获取电视,但我不能',请帮忙。
这是我的代码:
public class PickDate_main extends AppCompatActivity {
EditText tv_fecha;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pickdate_main);
}
public void showDatePickerDialog(View v){//This method is executed from the layout with a button
PickDate_Dialog dialog = new PickDate_Dialog();
FragmentTransaction ft = getFragmentManager().beginTransaction();
dialog.show(ft, "Date pickeerr");
}
}
--
public class PickDate_Dialog extends DialogFragment implements DatePickerDialog.OnDateSetListener{
public PickDate_Dialog(){
}
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 PickDate_Dialog(getActivity(),this,year,month,day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
String date = day + "-"+(month+1)+"-"+year;
//I want to write the string "data", i suppose it must be here
}
}
我相信如果您将 textview 发送到 PickDate_Dialog、保存它并在需要时调用它,它应该可以工作。不过不确定 return new PickDate_Dialog(getActivity(),this,year,month,day);
。
public class PickDate_Dialog extends DialogFragment implements DatePickerDialog.OnDateSetListener{
private EditText dateEditText;
public PickDate_Dialog(EditText et){
dateEditText = et;
}
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);
//Do you have a constructor for this? This is likely your issue
return new PickDate_Dialog(getActivity(),this,year,month,day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
String date = day + "-"+(month+1)+"-"+year;
if (dateEditText != null)
dateEditText.setText(date);
}
}
不过,这里还有一些想法:
选项 1:查看接口。这是一种允许您在 class 之间发送回调的方法(DatePickerDialog.OnDateSetListener 是一个示例)。在对话框中创建一个新界面 class
public interface PickDateInterface {
void onDateSet(String date)
}
为其创建一个变量
私有 PickDateInterface mPDInterface;
并添加到原来的onDateSet
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
String date = day + "-"+(month+1)+"-"+year;
if (mPDInterface != null) {
mPDInterface.onDateSet(date);
}
}
而且你在创建对话框的时候,把这个接口作为参数添加进去,在这个接口里面添加你需要做的事情就可以了。
选项 2:
在您的 activity 中创建一个 public 方法并通过
(([你的 activity 名字])[你的上下文]).你的方法;
您基本上是将上下文投射到 activity 并使用该方法
例子:
((PickDate_main).getContext()).setDateText(date);