ベナヤリオ:
私が作ると問題抱えているRecycleView
Firebaseからのデータをフラグメントにします。私はアプリが表示するように期待しRecycleView
、私は1つの断片からの変更へのボタンをクリックした後RecycleView
の断片が、それが示したフラグメントを変更したが、それは何も表示されません。
私はこのような質問の多くがあります知っているが、私は、この問題に対する正しい解決策を見つけるように見えることはありません。
私はではなく、断片と、Firebase RecyclerViewのために必要なすべてのものを作って、代わりの断片アクティビティーの内側にそれを構築しようとしましたが、それは仕事をしたしました。私が働いているように見えるonActivityCreated、onCreateViewメソッドの内部アダプタとrecyclerviewを初期化しようとした、およびそれらの方法とどれをonViewCreatedました。
ここに私のフラグメントのコードは次のとおりです。
private KidAdapter adapter;
private RecyclerView recyclerView;
Button button;
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.uangsaku_menu_fragment, container, false);
button = view.findViewById(R.id.btn_add);
button.setOnClickListener(this);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
setUpRecyclerView();
return view;
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.btn_add){
Intent intent = new Intent(getActivity(), Register.class);
startActivity(intent);
}
}
public void setUpRecyclerView(){
Query query = FirebaseDatabase.getInstance().getReference("kids");
FirebaseRecyclerOptions<kidData> options = new FirebaseRecyclerOptions.Builder<kidData>()
.setQuery(query, kidData.class)
.build();
adapter = new KidAdapter(options);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
}
@Override
public void onStart() {
super.onStart();
if (adapter != null) {
adapter.startListening();
}
}
@Override
public void onStop() {
super.onStop();
if (adapter != null) {
adapter.stopListening();
}
}
}
アダプタクラス
public class KidAdapter extends FirebaseRecyclerAdapter<kidData, KidAdapter.KidViewHolder> {
public KidAdapter(@NonNull FirebaseRecyclerOptions<kidData> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull KidViewHolder holder, int position, @NonNull kidData model) {
holder.nama.setText(model.getKidName());
holder.balance.setText(model.getKidBalance());
holder.limit.setText("Limit: "+model.getKidLimit());
holder.spending.setText("Spending xxx.xxx");
}
@NonNull
@Override
public KidViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.kids_card,
viewGroup, false);
return new KidViewHolder(v);
}
public class KidViewHolder extends RecyclerView.ViewHolder {
TextView nama, balance, limit, spending;
public KidViewHolder(@NonNull View itemView) {
super(itemView);
nama = itemView.findViewById(R.id.tv_nama);
balance = itemView.findViewById(R.id.tv_balance);
limit = itemView.findViewById(R.id.tv_dailylimit);
spending = itemView.findViewById(R.id.tv_dailyspending);
}
}
}
kidDataモデルクラス
public class kidData {
String kidName, kidEmail, kidDoB, kidLimit, kidBalance;
public kidData(){
}
public kidData(String kidName, String kidEmail, String kidDoB, String kidLimit, String kidBalance) {
this.kidName = kidName;
this.kidEmail = kidEmail;
this.kidDoB = kidDoB;
this.kidLimit = kidLimit;
this.kidBalance = kidBalance;
}
public String getKidName() {
return kidName;
}
public String getKidEmail() {
return kidEmail;
}
public String getKidDoB() {
return kidDoB;
}
public String getKidLimit() {
return kidLimit;
}
public String getKidBalance() {
return kidBalance;
}
}
アレックス・マモ:
あなたのコードに問題は次のコード行を使用することです:
recyclerView.setHasFixedSize(true);
最新バージョンの使用している場合ので、これがあるFirebase-UI
ライブラリを、のサイズを設定する必要はありませんRecyclerView
固定としては。この問題を解決するための解決策は、単純に/削除上記のコード行をコメントすることです。それでおしまい!