我嘗試了這里提到的大多數有類似問題的解決方案,但似乎沒有一個對我有用......現在我觀察到的是代碼能夠從 firebase 獲取資料并且它能夠設定資料但是getitemcount 方法沒有更新,即使在我將其設定為專案串列大小后,它仍然顯示為零,任何關于我做錯了什么的幫助都會有所幫助
Activity class
package com.example.sololeveling;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.widget.Toast;
import com.example.sololeveling.DAO.CasinoCouponsDao;
import com.example.sololeveling.DAO.CasinoHistoryDao;
import com.example.sololeveling.DAO.CouponDao;
import com.example.sololeveling.DAO.UserDAO;
import com.example.sololeveling.Entity.CasinoHistory;
import com.example.sololeveling.adapter.CasinoHistoryAdapter;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
public class HistoryActivity extends AppCompatActivity {
CasinoHistoryDao casinoHistoryDao;
RecyclerView casinoHistoryView;
CasinoHistoryAdapter casinoHistoryAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
initializeLevelObjects();
loadRollHistory();
casinoHistoryView.setAdapter(casinoHistoryAdapter);
casinoHistoryView.setLayoutManager(new LinearLayoutManager(this));
}
private void loadRollHistory()
{
casinoHistoryDao.get().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
ArrayList<CasinoHistory> casinoHistoryArrayList = new ArrayList<>();
for(DataSnapshot dataSnapshot : snapshot.getChildren())
{
CasinoHistory casinoHistory = dataSnapshot.getValue(CasinoHistory.class);
casinoHistory.setKey(dataSnapshot.getKey());
casinoHistoryArrayList.add(casinoHistory);
}
casinoHistoryAdapter.setCasinoHistoryArrayList(casinoHistoryArrayList);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(HistoryActivity.this, "Fail to get data.", Toast.LENGTH_SHORT).show();
}
});
}
private void initializeLevelObjects()
{
casinoHistoryDao = new CasinoHistoryDao();
casinoHistoryView = findViewById(R.id.historyrollview);
casinoHistoryAdapter = new CasinoHistoryAdapter(this);
}
}
Adapter class
package com.example.sololeveling.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.sololeveling.Entity.CasinoHistory;
import com.example.sololeveling.R;
import com.example.sololeveling.ViewHolder.CasinoHistoryViewHolder;
import java.util.ArrayList;
public class CasinoHistoryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
{
private Context context;
ArrayList<CasinoHistory> casinoHistoryArrayList = new ArrayList<>();
public CasinoHistoryAdapter(Context context) {
this.context = context;
}
public void setCasinoHistoryArrayList(ArrayList<CasinoHistory> casinoHistories)
{
this.casinoHistoryArrayList = casinoHistories;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.casino_history_list, parent, false);
return new CasinoHistoryViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
CasinoHistoryViewHolder casinoHistoryViewHolder = (CasinoHistoryViewHolder) holder;
CasinoHistory casinoHistory = casinoHistoryArrayList.get(position);
casinoHistoryViewHolder.historyView.setText("you got " casinoHistory.getCoupon() " at " casinoHistory.getDate());
}
@Override
public int getItemCount()
{
return casinoHistoryArrayList.size();
}
}
ViewHolder class
package com.example.sololeveling.ViewHolder;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.sololeveling.R;
public class CasinoHistoryViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
public TextView historyView;
public CasinoHistoryViewHolder(@NonNull View itemView) {
super(itemView);
historyView = itemView.findViewById(R.id.historyview);
Log.d("CasinoHistoryViewHolder","inside");
}
@Override
public void onClick(View view) {
}
}
main activity xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HistoryActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@ id/historyrollview"
android:layout_width="412dp"
android:layout_height="729dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
item list xml
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="75dp"
android:clickable="true"
android:focusable="true"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@ id/historyview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="daily task"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
uj5u.com熱心網友回復:
更改資料后呼叫 notifyDataSetChanged() 方法。這個 android 函式通知附加的觀察者底層資料已更改,并且任何反映資料集的視圖都應自行重繪 。
public void setCasinoHistoryArrayList(ArrayList<CasinoHistory> casinoHistories)
{
this.casinoHistoryArrayList = casinoHistories;
notifyDataSetChanged();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/447456.html
上一篇:從滿足范圍的條件中洗掉多行
