从 dialogfragment 设置片段 edittext 值
Set fragment edittext value from dialogfragment
我正在尝试创建搜索日期。这是我在这里做的 RijekSearch.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_rijek_search, container, false);
EditText start = (EditText) v.findViewById(R.id.startdateval);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
DatePickerFragment myDialogFragment = new DatePickerFragment();
myDialogFragment.show(fm, "dialog_fragment");
}
});
return v;
}
这里是DatePickerFragment
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@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);
}
@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());
Fragment fr = new RijekSearch();
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
Bundle args = new Bundle();
args.putString("startval", formattedDate);
fr.setArguments(args);
ft.replace(R.id.content_frame, fr);
ft.commit();
}
}
所以。首先我打开 RijekSearch
这是一个片段。然后在我单击 start
(EditText) 后,它将显示 dialogfragment
(DatePickerFragment)。显示没有问题也没有报错
我的问题是,我如何在从 DatePickerFragment
中选择日期后设置 start
值?
两种方法:
1. 创建一个public static editText(不推荐,内存泄漏)。
2.创建侦听器并在对话片段中传递实例。
创建界面DateCallback
interface DateCallback{
void onDateSet(String fDate);
}
在 DialogFragment
参数中获取这个
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private static DataCallback dataCallback;
public static DatePickerFragment newInstance(DataCallback dataCallback){
this.dataCallback = dataCallback;
return new DatePickerFragment();
}
@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);
}
@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());
FragmentManager fm=getFragmentManager();
dataCallback.onDateSet(formattedDate);
fm.popBackStack();
}
}
现在在您的 RijekSearch 中
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
DatePickerFragment myDialogFragment = DatePickerFragment.newInstance(new DateCallback(){
@Override
public void onDateSet(String fDate){
start.setText(fDate);
}
});
myDialogFragment.show(fm, "dialog_fragment");
}
});
您需要将EditText
数据一Fragment
传给DialogFragment
先去掉这个start.setOnClickListener()
你可以用这些
1 -on Text Change Listener
2 - FocusChangeListener
3 -Search and handle its click
动作传递 EditText
数据
Bundle args = new Bundle();
args.putString("key", "value");
DialogFragment newFragment = new YourDialogFragment();
newFragment.setArguments(args);
newFragment.show(getSupportFragmentManager(), "TAG");
并在 DialogFragment
中获取值
Bundle mArgs = getArguments();
String myValue = mArgs.getString("key");
我正在尝试创建搜索日期。这是我在这里做的 RijekSearch.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_rijek_search, container, false);
EditText start = (EditText) v.findViewById(R.id.startdateval);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
DatePickerFragment myDialogFragment = new DatePickerFragment();
myDialogFragment.show(fm, "dialog_fragment");
}
});
return v;
}
这里是DatePickerFragment
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@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);
}
@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());
Fragment fr = new RijekSearch();
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
Bundle args = new Bundle();
args.putString("startval", formattedDate);
fr.setArguments(args);
ft.replace(R.id.content_frame, fr);
ft.commit();
}
}
所以。首先我打开 RijekSearch
这是一个片段。然后在我单击 start
(EditText) 后,它将显示 dialogfragment
(DatePickerFragment)。显示没有问题也没有报错
我的问题是,我如何在从 DatePickerFragment
中选择日期后设置 start
值?
两种方法: 1. 创建一个public static editText(不推荐,内存泄漏)。 2.创建侦听器并在对话片段中传递实例。
创建界面DateCallback
interface DateCallback{
void onDateSet(String fDate);
}
在 DialogFragment
参数中获取这个
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private static DataCallback dataCallback;
public static DatePickerFragment newInstance(DataCallback dataCallback){
this.dataCallback = dataCallback;
return new DatePickerFragment();
}
@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);
}
@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());
FragmentManager fm=getFragmentManager();
dataCallback.onDateSet(formattedDate);
fm.popBackStack();
}
}
现在在您的 RijekSearch 中
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getFragmentManager();
DatePickerFragment myDialogFragment = DatePickerFragment.newInstance(new DateCallback(){
@Override
public void onDateSet(String fDate){
start.setText(fDate);
}
});
myDialogFragment.show(fm, "dialog_fragment");
}
});
您需要将EditText
数据一Fragment
传给DialogFragment
先去掉这个start.setOnClickListener()
你可以用这些
1 -on Text Change Listener
2 - FocusChangeListener
3 -Search and handle its click
动作传递 EditText
数据
Bundle args = new Bundle();
args.putString("key", "value");
DialogFragment newFragment = new YourDialogFragment();
newFragment.setArguments(args);
newFragment.show(getSupportFragmentManager(), "TAG");
并在 DialogFragment
Bundle mArgs = getArguments();
String myValue = mArgs.getString("key");