Обновление значений элемента RecyclerViewAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Обновление значений элемента RecyclerView

Сообщение Гость »


Я создаю приложение обратного отсчета, которое позволяет вам установить обратный отсчет для определенной даты, которая затем будет отображаться в RecyclerView, показывающем количество дней, часов, минут и секунд, оставшихся до этой даты. У меня все работает, но я не уверен, как обновить дни, часы, минуты и секунды, поскольку сейчас значения обновляются только при запуске приложения, но я хочу, чтобы значения обновлялись постоянно.

Вот мой класс MainActivity:

пакет com.example.countdown; импортировать androidx.annotation.NonNull; импортировать androidx.appcompat.app.AppCompatActivity; импортировать androidx.recyclerview.widget.LinearLayoutManager; импортировать androidx.recyclerview.widget.RecyclerView; импортировать android.content.Intent; импортировать android.os.Bundle; импортировать android.os.Handler; импортировать android.util.Log; импортировать android.view.View; импортировать android.widget.Button; импортировать com.google.android.material.floatingactionbutton.FloatingActionButton; импортировать com.google.firebase.auth.FirebaseAuth; импортировать com.google.firebase.auth.FirebaseUser; импортировать com.google.firebase.database.DataSnapshot; импортировать com.google.firebase.database.DatabaseError; импортировать com.google.firebase.database.DatabaseReference; импортировать com.google.firebase.database.FirebaseDatabase; импортировать com.google.firebase.database.ValueEventListener; импортировать org.checkerframework.checker.units.qual.A; импортировать java.util.ArrayList; публичный класс MainActivity расширяет AppCompatActivity { частная FloatingActionButton newCountdownButton; частная кнопка logOutButton; частный FirebaseAuth firebaseAuth; частный пользователь FirebaseUser; RecyclerView recyclerView; База данныхСправочная база данныхСправочная информация; МойАдаптерМойАдаптер; Список ArrayList; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_main); newCountdownButton = findViewById(R.id.newCountdownBtn); logOutButton = findViewById(R.id.logOutBtn); firebaseAuth = FirebaseAuth.getInstance(); пользователь = firebaseAuth.getCurrentUser(); если (пользователь == ноль) { Намерение намерение = новое намерение (MainActivity.this, LoginActivity.class); startActivity (намерение); заканчивать(); } logOutButton.setOnClickListener(новый View.OnClickListener() { @Override public void onClick (Просмотр) { firebaseAuth.signOut(); Намерение намерение = новое намерение (MainActivity.this, LoginActivity.class); startActivity (намерение); } }); newCountdownButton.setOnClickListener(новый View.OnClickListener() { @Override public void onClick (Просмотр) { Намерение намерение = новое намерение (MainActivity.this, CountdownActivity.class); startActivity (намерение); } }); recyclerView = findViewById(R.id.recyclerView); dataReference = FirebaseDatabase.getInstance().getReference("Обратный отсчет"); recyclerView.setLayoutManager(новый LinearLayoutManager(this)); список = новый ArrayList(); myAdapter = новый MyAdapter (это, список); recyclerView.setAdapter(myAdapter); dataReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull моментальный снимок DataSnapshot) { список.очистить(); for (DataSnapshot dataSnapshot: snapshot.getChildren()) { Обратный отсчет = dataSnapshot.getValue(Countdown.class); if (countdown.getUserID().equals(user.getUid()))) { list.add(обратный отсчет); } Log.d("MainActivity", String.valueOf(list.size())); } myAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError error) { Log.d("MainActivity", "Ошибка базы данных: " + ошибка); } }); } } Мой класс обратного отсчета:

пакет com.example.countdown; импортировать java.time.Duration; импортировать java.time.LocalDateTime; импортировать java.time.LocalDateTime; импортировать java.time.format.DateTimeFormatter; публичный класс Обратный отсчет { заголовок частной строки, дата, время, идентификатор пользователя; public void setTitle(String title) { this.title = заголовок; } public void setDate(String date) { this.date = дата; } public void setTime(String time) { это.время = время; } общественный недействительный setUserID (String userID) { this.userID = userID; } публичная строка getTitle() { вернуть заголовок; } публичная строка getDate() { Дата возврата; } публичная строка getTime() { время возврата; } публичная строка getUserID() { вернуть идентификатор пользователя; } общественная продолжительность getRemainingTime() { LocalDateTime currentTime = LocalDateTime.now(); LocalDateTime targetTime = LocalDateTime.parse(date + " " + время, DateTimeFormatter.ofPattern("дд.ММ.гггг ЧЧ:мм")); Длительность = Duration.between(currentTime, targetTime); продолжительность возврата; } } и класс адаптера RecyclerView:
пакет com.example.countdown; импортировать android.content.Context; импортировать android.view.LayoutInflater; импортировать android.view.ViewGroup; импортировать androidx.annotation.NonNull; импортировать androidx.recyclerview.widget.RecyclerView; импортировать java.util.ArrayList; публичный класс MyAdapter расширяет RecyclerView.Adapter { Контекстный контекст; Список ArrayList; public MyAdapter (контекст контекста, список ArrayList) { this.context = контекст; this.list = список; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup родительский, int viewType) { вернуть новый MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_view, родительский, false)); } @Override public void onBindViewHolder(@NonNull MyViewHolder Holder, int Position) { Holder.countdownTitleTextView.setText(list.get(position).getTitle()); Holder.daysValueTextView.setText(String.valueOf(list.get(position).getRemainingTime().toDays())); Holder.hoursValueTextView.setText(String.valueOf(list.get(position).getRemainingTime().toHours() % 24)); держатель.минутыValueTextView.setText(String.valueOf(list.get(position).getRemainingTime().toMinutes() % 60)); Holder.секундыValueTextView.setText(String.valueOf(list.get(position).getRemainingTime().toMillis() % 60)); } @Override общественный ИНТ getItemCount () { вернуть список.размер(); } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»