DatePickerDialog результат обратно во фрагмент? - PullRequest
0 голосов
/ 24 мая 2018

Я хочу получить выбранную дату из DatePickerDialog обратно в мой фрагмент.Когда я проверяю это, я получаю только в журнале сборки эту ошибку: E / ViewRootImpl: sendUserActionEvent () mView == null

Тестирование моего кода на Samsung Galaxy S6 Edge (7.0)

Появляется диалоговое окно, я могу выбрать дату, нажать "ОК", но не могу получить результат для моего TextView ... Я забыл небольшую деталь ??

Мой фрагмент, гдея вызываю DatePickerDialog:

package at.marcelklein.drautaxi;

import android.app.DatePickerDialog;
import android.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;

import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import android.widget.DatePicker;
import android.widget.TextView;

import java.text.DateFormat;
import java.util.Calendar;

/**
 * Created by Marcel on 10.09.2017.
 */

public class FourthFragment extends Fragment implements DatePickerDialog.OnDateSetListener {

    View myView;
    TextView textView;
    Button btnDayStart, btnDayEnd;



    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        myView = inflater.inflate(R.layout.fourth_layout, container, false);

        btnDayStart = (Button) myView.findViewById(R.id.button_daystart);
        btnDayEnd = (Button) myView.findViewById(R.id.button_dayend);
        textView = (TextView) myView.findViewById(R.id.textView12);

        btnDayStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               DialogFragment datePicker = new DatePickerFragment();
                FragmentTransaction ft = ((FragmentActivity)getActivity()).getSupportFragmentManager().beginTransaction();
                datePicker.show(ft, "datepicker");
            }
        });

        btnDayEnd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //showDialog();
            }
        });


        return myView;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        String currentDateString = DateFormat.getDateInstance(DateFormat.FULL).format(c.getTime());
        textView.setText(currentDateString);
    }





}

DatePickerDialog Fragment:

package at.marcelklein.drautaxi;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;

import java.util.Calendar;

public class DatePickerFragment extends DialogFragment {

    DatePickerDialog.OnDateSetListener onDateSet;

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        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(), onDateSet, year, month, day);
    }
}

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Я изменил свой код на это: DatePickerDialog

public class DatePickerFragment extends DialogFragment  implements DatePickerDialog.OnDateSetListener {

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    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) {

    TextView tv = (TextView) getActivity().findViewById(R.id.textView12);
    DecimalFormat df = new DecimalFormat("00");
    tv.setText("Gewähltes Datum:");
    tv.setText(tv.getText() + "\nJahr: " + year);
    tv.setText(tv.getText() + "\nMonat: " + df.format(month));
    tv.setText(tv.getText() + "\nTag: " + df.format(day));
}

----------- И мой Фрагмент , где я вызываю DatePickerDialog :

public class FourthFragment extends Fragment {

View myView;
public TextView textView;
Button btnDayStart, btnDayEnd;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.fourth_layout, container, false);
    btnDayStart = (Button) myView.findViewById(R.id.button_daystart);
    btnDayEnd = (Button) myView.findViewById(R.id.button_dayend);
    textView = (TextView) myView.findViewById(R.id.textView12);

    btnDayStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DialogFragment datePicker = new DatePickerFragment();
            datePicker.show(getFragmentManager(), "date Picker");
        }
    });

    return myView;
}

Теперь я изменяю TextView непосредственно из DatePickerDialog.Я думаю, что это не лучшее решение ...

Мне кажется, что я хочу использовать Range Date Picker, например, TimeSquare DatePicker.Но я не могу выбрать дни из прошлого в «TimeSquare DatePicker».

Есть предложения?

0 голосов
/ 24 мая 2018

Вы забыли назначить свой фрагмент в качестве слушателя.Добавьте это как слушатель как этот

btnDayStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DialogFragment datePicker = new DatePickerFragment();
            datePicker.onDateSet = FourthFragment.this
            FragmentTransaction ft = ((FragmentActivity)getActivity()).getSupportFragmentManager().beginTransaction();
            datePicker.show(ft, "datepicker");
        }
    });
...