2017-09-17 41 views
0

我有一個片段activity.I實現了它的searchview,它的項目從Firebase加載列表listview.It它工作時,我等待一段時間並加載數據。但,當我在負載發生之前立即點擊searchview時,它甚至在很長時間之後都沒有加載任何數據。然後,當我回到主片段並再次返回時立即使負載數據。我認爲這是一個小問題。但,我在Android的初學者development.so這是非常困難的我。我的代碼是帶有列表視圖的Searchview無法正常工作

public class FragmentHome extends Fragment { 
private SearchView search; 
View view; 
DatabaseReference dataRef; 
private FirebaseListAdapter<String> firebaseListAdapter; 
ListView mListView; 
private TextView text; 
ArrayList<String> city=new ArrayList<String>(); 
private int i=0; 
private String data,val,var; 
ArrayAdapter<String> adapter; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable final Bundle savedInstanceState) { 
    View v= inflater.inflate(R.layout.activity_fragment_home,container,false); 
    if (container!=null){ 
     container.removeAllViews(); 
    } 
    search= (SearchView) v.findViewById(R.id.search); 
    search.onActionViewExpanded(); 
    search.setIconified(false); 
    search.setQueryHint("Search Docter By City Or Department"); 
    mListView= (ListView) v.findViewById(R.id.mList); 
    mListView.setVisibility(View.INVISIBLE); 
    dataRef=FirebaseDatabase.getInstance().getReference().child("Docters"); 
    adapter=new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, city); 
    mListView.setAdapter(adapter); 
    dataRef.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      data=dataSnapshot.child("city").getValue(String.class); 
      val=dataSnapshot.child("department").getValue(String.class); 
      if (!city.contains(data)){ 
       city.add(data); 
      } 
      if (!city.contains(val)){ 
       city.add(val); 
      } 
      adapter.notifyDataSetChanged(); 

     } 
     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      data=dataSnapshot.child("city").getValue(String.class); 
      val=dataSnapshot.child("department").getValue(String.class); 
      city.add(data); 
      city.add(val); 
      city.add(var); 
      adapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
    search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String text) { 

      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String text) { 
      if (!text.isEmpty()){ 
      mListView.setVisibility(View.VISIBLE); 
       adapter.getFilter().filter(text); 
      }else{ 
       mListView.setVisibility(View.INVISIBLE); 
      } 
      return false; 
     } 

    }); 

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      String itemRef = (String) adapter.getItem(position); 
      search.setVisibility(View.INVISIBLE); 
      mListView.setVisibility(View.INVISIBLE); 
      FragmentTransaction ft=getChildFragmentManager().beginTransaction(); 
      DocterList fragment=new DocterList(); 
      Bundle item=new Bundle(); 
      item.putString("item",itemRef); 
      fragment.setArguments(item); 
      ft.replace(R.id.activity_fragment_home,fragment); 
      ft.addToBackStack(null); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
      ft.commit(); 
     } 
    }); 
    return v; 
    }} 

有人知道解決這個問題,請幫助me.Advanced謝謝...

回答

0

在您的適配器這樣

public void filter(String charText) { 
    charText = charText.toLowerCase(Locale.getDefault()); 
    contactList.clear(); 
    if (charText.length() == 0) { 
     contactList.addAll(contactListFiler); 
    }else{ 
     for (Contacts contact : contactListFiler) 
     { 
      if (contact.getNumber().toLowerCase(Locale.getDefault()).contains(charText.toLowerCase(Locale.getDefault()))) 
      if (contact.getContact_name().toLowerCase(Locale.getDefault()).contains(charText.toLowerCase(Locale.getDefault()))) 
      { 
       contactList.add(contact); 
      } 
     } 
    } 
    notifyDataSetChanged(); 
} 

做的方法過濾器現在通過實施

edittext_searchname.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      String str = edittext_searchname.getText().toString().toLowerCase(Locale.getDefault()); 
      adapter.filter(str); 
     } 
    }); 
從活動或片段叫它