-1

firebaseからデータを取得して、EditTextにある値に応じてリストビューに表示しています。しかし、EditTextの値を変更すると、listViewから以前の値を削除して新しい値を表示する必要があります。リストビューから古いアイテムを削除し、ボタンをクリックすると新しいアイテムで更新する

以前の値を削除する方法はいくつかありましたが、新しい値が2回表示されました。値を一度しか表示しないようにしたいとは思わない。

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 

import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 

public class AnonymousBloodBank extends AppCompatActivity { 

private ListView lv; 
AlertDialogManager alert = new AlertDialogManager(); 
private ProgressDialog progressDialog; 

EditText editTextBloodGroup; 
//private AutoCompleteTextView acTextView; 
Button btnSearch; 
final int[] count = {0}; 
List<String> list = new ArrayList<String>(); 
final ArrayList<String> nameData = new ArrayList<>(); 
final ArrayList<String> bloodInfo = new ArrayList<>(); 
final ArrayList<String> contactInfo = new ArrayList<>(); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_anonymous_blood_bank); 

    editTextBloodGroup = (EditText) findViewById(R.id.editBloodGroup); 

    lv = (ListView) findViewById(R.id.lvBlood); 
    btnSearch = (Button) findViewById(R.id.btnSearch); 


    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      String contact = contactInfo.get(position); 
      try { 
       String uri = "tel:" + contact; 
       Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse(uri)); 
       startActivity(callIntent); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 


    final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    final DatabaseReference myRef = database.getReference().child("clients"); 
    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(final DataSnapshot dataSnapshot) { 
      btnSearch.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        collectionInfo((Map<String, Object>) dataSnapshot.getValue()); 
       } 
      }); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 

    }); 
} 

//Retrieve location from database 
public void collectionInfo(Map<String, Object> users) 
{ 
    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); 
    for(int i=0; i<arrayAdapter.getCount(); i++) 
    { 
     list.remove(i); 

    } 
    arrayAdapter.notifyDataSetChanged(); 
    arrayAdapter.notifyDataSetInvalidated(); 

    for (Map.Entry<String, Object> entry : users.entrySet()) { 
     //Get user map 
     Map singleUser = (Map) entry.getValue(); 
     //Get phone field and append to list 
     bloodInfo.add((String) singleUser.get("bloodgroup")); 
     contactInfo.add((String) singleUser.get("contact")); 
     nameData.add((String) singleUser.get("name")); 
     count[0]++; 
    } 

    for (int i = 0; i < count[0]; i++) { 
     if(bloodInfo.get(i).equals(editTextBloodGroup.getText().toString())) 
     { 
      try{ 
       list.add(nameData.get(i)); 
      }catch (Exception e) { 
       alert.showAlertDialog(AnonymousBloodBank.this, "No blood group", 
         "Please enter blood group", false); 
      } 
     } 

    } 
    lv.setAdapter(arrayAdapter); 

    } 
} 

The output screenshot is given. When I click on search button the values for eg: theakshay naik must be deleted and new value must instead of it

答えて

0

あなたは他のリストをクリアしていない:NameDataです、bloodInfo、のContactInfoを。 count [0]は常に増加しています。値をゼロに初期化したり、ゼロをクリアしたりする部分はありません。 collectionInfoメソッドの最初にこれを実行してください:

nameData.clear(); 
bloodInfo.clear(); 
contactInfor.clear(); 
count[0] = 0; 
関連する問題