現在、すべてのリポジトリデータをlistViewに表示するアプリケーションを開発中です。私の断片では、fetchRepoDataという関数を呼び出し、Firebase DBからデータを取り出し、listViewに入れます。Firebaseデータが変更されたときのAndroid Studioのビューの更新
OnCreateView
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.repo_result_tab, container, false);
repoListView = (ListView) view.findViewById(R.id.repoList_result);
radioGroup = (RadioGroup) view.findViewById(R.id.radio_group);
sortByNameRadio = (RadioButton) view.findViewById(R.id.sort_by_name);
sortByRelevanceRadio = (RadioButton) view.findViewById(R.id.sort_by_relevance);
repoListItems = new ArrayList<>();
repoNameList = new ArrayList<>();
userNameList = new ArrayList<>();
descriptionList = new ArrayList<>();
adapter = new RepoListAdapter(getContext(), repoListItems);
repoListView.setAdapter(adapter);
Database = FirebaseDatabase.getInstance().getReference();
repoReference = Database.child("Repo Search Results");
.....
fetchRepoData
private void fetchRepoData(String profileUserID) {
profileUserDatabase = repoReference.child(profileUserID);
//DatabaseReference reposReference = profileUserDatabase.child("Repos");
profileUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Toast.makeText(getActivity(), "changed", Toast.LENGTH_SHORT).show();
for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
repoNameList.add(snapshot.getValue(RepoInfo.class).getRepoName());
userNameList.add(snapshot.getValue(RepoInfo.class).getOwner());
descriptionList.add(snapshot.getValue(RepoInfo.class).getDescription());
}
for(int i = 0; i < repoNameList.size(); i++) {
repoListItems.add(new RepositoryItem(i, repoNameList.get(i), userNameList.get(i), descriptionList.get(i)));
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
私はFirebase内のデータを更新しようとするたびしかし、ListViewコントロールを更新し、同じままされません。トーストメッセージが「変更されました」と表示されますが、リストからアイテムを削除してもビューは変わりません。
私もOnDataChangeの内部
repoListItems.clear();
を入れてみましたが、それはうまくいきませんでした。
ところで、あなたはアイテムを削除したと言いますが、それはリストから削除されませんでした。削除するにはアダプタから削除する必要があります。アイテムを追加したケースのみ管理しました。 –