Передача данных в запрос, без обновления - PullRequest
0 голосов
/ 05 февраля 2019

Я создаю простую программу для сохранения значений каждый день вместе с отметкой времени

Firebase

После сохранения я хочу выбрать дату и длямой вид переработчика, чтобы показать все значения, связанные с ним

Есть ли способ получить passDate для обновления при каждом нажатии кнопки?

Я понимаю, что это, вероятно, очень простое исправление, но я получил самв цикле.

Я пытался убрать Query из onCreate, но столкнулся с проблемой, и я не могу вынуть адаптер из oncreate, не столкнувшись с серьезными проблемами

1 Ответ

0 голосов
/ 05 февраля 2019

DatePickerDialog.OnDateSetListener работает асинхронно, поэтому выбор даты не блокирует остальную часть приложения.Это означает, что дата, выбранная пользователем, доступна только в пределах onDateSet.Весь код, для которого требуется дата, должен быть в пределах onDateSet или вызываться оттуда.

Поэтому самое простое решение - переместить весь код, который зависит от даты, в onDateSet:

mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        month = month + 1;
        String yearAsString = Integer.toString(year);
        String monthAsString = Integer.toString(month);
        String dayAsString = Integer.toString(day);
        if (day <= 9 & month <= 9) {
            String date = "0" + dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        } else if (day <= 9 & month > 9) {
            String date = "0" + dayAsString + "-" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        } else if (month <= 9) {
            String date = dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        } else {
            String date = dayAsString + "-" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        }

        String passDate = mDisplayDate.getText().toString().trim();

        Log.i(TAG, "PassDate = " + passDate);

        Query query = databaseReference.orderByChild("timestamp").equalTo(passDate);
        options = new FirebaseRecyclerOptions.Builder<Records>().setQuery(query, Records.class).build();

        adapter = new FirebaseRecyclerAdapter<Records, RecordsViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull RecordsViewHolder holder, int position, @NonNull Records model) {
                holder.t1.setText(model.getTimestamp());

            }

            @NonNull
            @Override
            public RecordsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.saved_records_view, viewGroup, false);

                return new RecordsViewHolder(view);
            }
        };
        GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 1);
        recyclerView.setLayoutManager(gridLayoutManager);
        recyclerView.setAdapter(adapter);
    }
};

Вы также можете заставить свой класс представления реализовать DatePickerDialog.OnDateSetListener, чтобы немного уменьшить отступ:

public class SavedFeedRecords extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {

Это означает, что onDateSet становится обычным методом в SavedFeedRecords:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_saved_feed_records);
    mDisplayDate = findViewById(R.id.tvDate);
    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);

    databaseReference = FirebaseDatabase.getInstance().getReference().child(fAuth.getCurrentUser().getUid()).child("feedRecords");


    findViewById(R.id.tvDate).setOnClickListener(displayDate);
    findViewById(R.id.button).setOnClickListener(viewRecords);
};

public void onDateSet(DatePicker datePicker, int year, int month, int day) {
    month = month + 1;
    String yearAsString = Integer.toString(year);
    String monthAsString = Integer.toString(month);
    String dayAsString = Integer.toString(day);
    if (day <= 9 & month <= 9) {
        String date = "0" + dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
        mDisplayDate.setText(date);
    } else if (day <= 9 & month > 9) {
        String date = "0" + dayAsString + "-" + monthAsString + "-" + yearAsString;
        mDisplayDate.setText(date);
    } else if (month <= 9) {
        String date = dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
        mDisplayDate.setText(date);
    } else {
        String date = dayAsString + "-" + monthAsString + "-" + yearAsString;
        mDisplayDate.setText(date);
    }
    String passDate = mDisplayDate.getText().toString().trim();

    Log.i(TAG, "PassDate = " + passDate);

    Query query = databaseReference.orderByChild("timestamp").equalTo(passDate);
    options = new FirebaseRecyclerOptions.Builder<Records>().setQuery(query, Records.class).build();

    adapter = new FirebaseRecyclerAdapter<Records, RecordsViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull RecordsViewHolder holder, int position, @NonNull Records model) {
            holder.t1.setText(model.getTimestamp());

        }

        @NonNull
        @Override
        public RecordsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.saved_records_view, viewGroup, false);

            return new RecordsViewHolder(view);
        }
    };
    GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 1);
    recyclerView.setLayoutManager(gridLayoutManager);
    recyclerView.setAdapter(adapter);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...