ListView在Android中,当Firebase数据库更新时,数值重复复制数值。

huangapple go评论94阅读模式
英文:

ListView Value duplicating the value when the firebase database is updated in Android

问题

以下是你提供的代码的翻译部分:

ListOfFaculty

  1. public class ListOfFaculty extends Fragment {
  2. DatabaseReference ref;
  3. ListView listview;
  4. List<String> store;
  5. List<String> UserID;
  6. String[] faculty_list;
  7. String a;
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. ref = FirebaseDatabase.getInstance().getReference("Faculty");
  12. }
  13. @Override
  14. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  15. Bundle savedInstanceState) {
  16. // Inflate the layout for this fragment
  17. final View root = inflater.inflate(R.layout.fragment_list_of_faculty, container, false);
  18. listview = root.findViewById(R.id.lv);
  19. store = new ArrayList<>();
  20. UserID = new ArrayList<>();
  21. ref.addValueEventListener(new ValueEventListener() {
  22. @Override
  23. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  24. for (DataSnapshot postsap : dataSnapshot.getChildren()) {
  25. DataSnapshot data = postsap.child("name");
  26. if (data.exists()) {
  27. a = data.getValue().toString();
  28. }
  29. store.add(a);
  30. String Id = postsap.getKey();
  31. UserID.add(Id);
  32. }
  33. faculty_list = new String[store.size()];
  34. for (int i = 0; i < faculty_list.length; i++) {
  35. faculty_list[i] = store.get(i);
  36. }
  37. if (getActivity() != null) {
  38. ArrayAdapter<String> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, faculty_list);
  39. listview.setAdapter(adapter);
  40. }
  41. }
  42. @Override
  43. public void onCancelled(@NonNull DatabaseError databaseError) {
  44. }
  45. });
  46. listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  47. @Override
  48. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  49. Intent i = new Intent(getContext(), Faculty.class);
  50. i.putExtra("User_Id", UserID.get(position));
  51. startActivity(i);
  52. }
  53. });
  54. listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
  55. @Override
  56. public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
  57. String name = faculty_list[position];
  58. Toast.makeText(getContext(), "" + UserID.get(position), Toast.LENGTH_SHORT).show();
  59. DialogFragment dialogFragment = new MyDailogFragment();
  60. Bundle bundle = new Bundle();
  61. bundle.putString("Name", name);
  62. bundle.putString("Id", UserID.get(position));
  63. dialogFragment.setArguments(bundle);
  64. dialogFragment.show(getChildFragmentManager(), "missiles");
  65. return true;
  66. }
  67. });
  68. return root;
  69. }
  70. }

这是我的代码对你提供的Java代码的翻译。如果你有任何问题或需要进一步的帮助,请随时提问。

英文:

I have Listview in a Fragment in which i am setting data using ArrayAdapter, when i am deleting the data with Dialog box the Value is duplicating in the listview. i don't know what to do i was thinkint to refresh my fragment when the delete button is clicked in dialog box but i don't how to do that.I am new to Android please let me know what can i do to solve this.Here is my Code.

ListOfFaculty

  1. public class ListOfFaculty extends Fragment {
  2. DatabaseReference ref;
  3. ListView listview;
  4. List&lt;String&gt; store;
  5. List&lt;String&gt; UserID;
  6. String[] faculty_list;
  7. String a;
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. ref = FirebaseDatabase.getInstance().getReference(&quot;Faculty&quot;);
  12. }
  13. @Override
  14. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  15. Bundle savedInstanceState) {
  16. // Inflate the layout for this fragment
  17. final View root = inflater.inflate(R.layout.fragment_list_of_faculty, container, false);
  18. listview = root.findViewById(R.id.lv);
  19. store =new ArrayList&lt;&gt;();
  20. UserID =new ArrayList&lt;&gt;();
  21. ref.addValueEventListener(new ValueEventListener() {
  22. @Override
  23. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  24. for(DataSnapshot postsap : dataSnapshot.getChildren() ) {
  25. DataSnapshot data = postsap.child(&quot;name&quot;);
  26. if(data.exists()){
  27. a = data.getValue().toString();
  28. }
  29. store.add(a);
  30. String Id = postsap.getKey();
  31. UserID.add(Id);
  32. }
  33. faculty_list = new String[store.size()];
  34. for(int i=0;i&lt;faculty_list.length;i++){
  35. faculty_list[i] =store.get(i);
  36. }
  37. if (getActivity() != null) {
  38. ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(getContext(), android.R.layout.simple_spinner_item, faculty_list);
  39. listview.setAdapter(adapter);
  40. }
  41. }
  42. @Override
  43. public void onCancelled(@NonNull DatabaseError databaseError) {
  44. }
  45. });
  46. listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  47. @Override
  48. public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {
  49. Intent i = new Intent(getContext(),Faculty.class);
  50. i.putExtra(&quot;User_Id&quot;,UserID.get(position));
  51. startActivity(i);
  52. }
  53. });
  54. listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
  55. @Override
  56. public boolean onItemLongClick(AdapterView&lt;?&gt; parent, View view, int position, long id) {
  57. String name = faculty_list[position];
  58. Toast.makeText(getContext(), &quot;&quot;+UserID.get(position), Toast.LENGTH_SHORT).show();
  59. DialogFragment dialogFragment =new MyDailogFragment();
  60. Bundle bundle =new Bundle();
  61. bundle.putString(&quot;Name&quot;,name);
  62. bundle.putString(&quot;Id&quot;,UserID.get(position));
  63. dialogFragment.setArguments(bundle);
  64. dialogFragment.show(getChildFragmentManager(),&quot;missiles&quot;);
  65. return true;
  66. }
  67. });
  68. return root;
  69. }
  70. }

This is my Dialog Box Code,I am calling this Dialog box with .setOnItemLongClickListener from my ListofFaculty fragment.

MyDailogFragment

  1. public class MyDailogFragment extends DialogFragment {
  2. DatabaseReference dailog;
  3. String Id;
  4. @NonNull
  5. @Override
  6. public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
  7. Bundle bundle = getArguments();
  8. final String name= bundle.getString(&quot;Name&quot;,&quot;&quot;);
  9. Id = bundle.getString(&quot;Id&quot;,&quot;&quot;);
  10. AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
  11. alertDialog.setMessage(&quot;Delete &quot;+name+ &quot; ?&quot;)
  12. .setPositiveButton(&quot;Delete&quot;, new DialogInterface.OnClickListener() {
  13. @Override
  14. public void onClick(DialogInterface dialog, int which) {
  15. Toast.makeText(getActivity(), &quot;&quot;+Id, Toast.LENGTH_SHORT).show();
  16. dailog = FirebaseDatabase.getInstance().getReference(&quot;Faculty&quot;).child(Id);
  17. dailog.addListenerForSingleValueEvent(new ValueEventListener() {
  18. @Override
  19. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  20. dataSnapshot.getRef().removeValue();
  21. Toast.makeText(getActivity(), name+&quot; Deleted Successfully &quot;, Toast.LENGTH_SHORT).show();
  22. }
  23. @Override
  24. public void onCancelled(@NonNull DatabaseError databaseError) {
  25. }
  26. });
  27. }
  28. })
  29. .setNegativeButton(&quot;Cancel&quot;, new DialogInterface.OnClickListener() {
  30. @Override
  31. public void onClick(DialogInterface dialog, int which) {
  32. Toast.makeText(getActivity(), &quot;Nothing&quot;, Toast.LENGTH_SHORT).show();
  33. }
  34. });
  35. return alertDialog.create();
  36. }
  37. }

答案1

得分: 0

你在有新值时必须清除旧数据

  1. ref.addValueEventListener(new ValueEventListener() {
  2. @Override
  3. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  4. store.clear();
  5. for(DataSnapshot postsap : dataSnapshot.getChildren() ){
  6. DataSnapshot data = postsap.child("name");
  7. if(data.exists()){
  8. a = data.getValue().toString();
  9. }
  10. store.add(a);
  11. String Id = postsap.getKey();
  12. UserID.add(Id);
  13. }
  14. faculty_list = new String[store.size()];
  15. for(int i=0;i<faculty_list.length;i++){
  16. faculty_list[i] =store.get(i);
  17. }
  18. if (getActivity() != null) {
  19. ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, faculty_list);
  20. listview.setAdapter(adapter);
  21. }
  22. }
  23. @Override
  24. public void onCancelled(@NonNull DatabaseError databaseError) {
  25. }
  26. });
英文:

You have to clear old data when have new value

  1. ref.addValueEventListener(new ValueEventListener() {
  2. @Override
  3. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  4. store.clear();
  5. for(DataSnapshot postsap : dataSnapshot.getChildren() ){
  6. DataSnapshot data = postsap.child(&quot;name&quot;);
  7. if(data.exists()){
  8. a = data.getValue().toString();
  9. }
  10. store.add(a);
  11. String Id = postsap.getKey();
  12. UserID.add(Id);
  13. }
  14. faculty_list = new String[store.size()];
  15. for(int i=0;i&lt;faculty_list.length;i++){
  16. faculty_list[i] =store.get(i);
  17. }
  18. if (getActivity() != null) {
  19. ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(getContext(), android.R.layout.simple_spinner_item, faculty_list);
  20. listview.setAdapter(adapter);
  21. }
  22. }
  23. @Override
  24. public void onCancelled(@NonNull DatabaseError databaseError) {
  25. }
  26. });

huangapple
  • 本文由 发表于 2020年9月9日 15:22:34
  • 转载请务必保留本文链接:https://go.coder-hub.com/63806621.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定