我在DatePickerFragment中遇到了一些问题。我无法从DatePickerFragment(onDateSet方法)中获取如何编辑活动中的textView。有一件事是使textview静态,但在这种情况下我得到一个警告:不要将android上下文类放入静态字段。
我可以忽略该警告或以其他方式更新我的观点吗?
我的代码如下所示:
public class Ad1StatsFilterActivity extends BaseActivity {
private static final String TAG = "Ad1StatsFilterActivity";
static TextView dateFrom;
TextView dateTo;
SimpleDateFormat dateFormatForTextView;
static String dateFromPicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ad1_stats_filter);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
activateToolbar(true);
dateFrom = (TextView) findViewById(R.id.ad1_filter_period_from);
dateTo = (TextView) findViewById(R.id.ad1_filter_period_to);
dateFormatForTextView = new SimpleDateFormat("d MMM YYYY", Locale.getDefault());
final DatePicker datePicker = new DatePicker(new Date());
final String currentDateTimeString = DateFormat.getDateInstance().format(new Date());
Spinner dateSpinner = (Spinner) findViewById(R.id.ad1_filter_date_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.ad1_date_filter, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dateSpinner.setAdapter(adapter);
dateSpinner.setSelection(0);
//Spinner
dateSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 1:
dateFrom.setText(dateFormatForTextView.format(new Date()));
dateTo.setText(dateFormatForTextView.format(new Date()));
break;
case 2:
DatePickerFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "datePicker");
Log.d(TAG, "onItemSelected: dateFromPiker = " + dateFromPicker);
if (dateFromPicker != null) dateFrom.setText(dateFromPicker);
break;
default:
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
private static final String TAG = "DatePickerFragment";
@Override
public void onDateSet(android.widget.DatePicker view, int year, int month, int dayOfMonth) {
final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
dateFromPicker = dateFormatter.format(newDate.getTime());
dateFrom.setText(dateFromPicker);
}
@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);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
}
}
我还需要两个不同的日期(日期和日期)。我找到了一个解决方法,如何做到这一点,但现在已经弃用了。获取两个不同的DatePicker对话框的最佳方法是什么?
答案 0 :(得分:0)
但是在那种情况下我得到一个警告:不要放置android上下文类 进入静态领域。
我可以忽略该警告或以其他方式更新我的观点吗?
永远不要试图这样做。它会导致内存泄漏并阻止您的活动被垃圾回收。
尝试从DatePickerFragment
:
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
通过这样做,您不需要对文本视图进行静态引用。
我还需要两个不同的日期(日期和日期)
这是你应该处理的事情。例如,您可以使用布尔标识符来指示所选日期是From Date
还是To Date
答案 1 :(得分:0)
首先,不需要将DatePickerFragment类设为静态文本视图。从DatePickerFragment更新文本视图的清洁解决方案将是。
声明类似
的界面 interface DateChangedListner{
onDatePicked(String date);
}
在活动中实现界面,并在从活动创建时将界面impl对象传递给DatePickFragment。