如何编辑DatePickerFragment中的View中的View?

时间:2017-03-24 11:13:33

标签: android

我在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对话框的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

  

但是在那种情况下我得到一个警告:不要放置android上下文类   进入静态领域。

     

我可以忽略该警告或以其他方式更新我的观点吗?

永远不要试图这样做。它会导致内存泄漏并阻止您的活动被垃圾回收。

尝试从DatePickerFragment

中删除静态修饰符
public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

通过这样做,您不需要对文本视图进行静态引用。

  

我还需要两个不同的日期(日期和日期)

这是你应该处理的事情。例如,您可以使用布尔标识符来指示所选日期是From Date还是To Date

答案 1 :(得分:0)

首先,不需要将DatePickerFragment类设为静态文本视图。从DatePickerFragment更新文本视图的清洁解决方案将是。

  1. 声明类似

    的界面

    interface DateChangedListner{ onDatePicked(String date); }

  2. 在活动中实现界面,并在从活动创建时将界面impl对象传递给DatePickFragment。

  3. 每当用户从DatePickerFragment
  4. 中选择日期时,都会调用界面impl对象
  5. 接口的实现将包含更新活动本身内的文本视图。