2012-03-14 4 views
0

У меня есть список, каждый из которых состоит из основного элемента и подпункта. Я использую фильтр, чтобы обновить список, когда пользователь вводит текст в текст поиска. При наборе элементов в списке вы получаете доступ в соответствии с типизированными алфавитами, однако каждый элемент отображается дважды. Ниже мой код:ListView отображает каждый элемент дважды после фильтрации

public class NewReqFragment extends ListFragment 
{ 
     ListView newReqList; 
    LayoutInflater inflater; 
    String[] from = new String[] {"mainrow", "subrow"}; 
    EditText searchBar = null; 
    SimpleAdapter sAdapter =null; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState);    
    } 

    public void onActivityCreated(Bundle savedInstanceState) 
     { 
      super.onActivityCreated(savedInstanceState); 

      newReqList = this.getListView(); 

      searchBar = (EditText)this.getActivity().findViewById(R.id.searchbar); 

      List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); 
      for(int i = 0; i < ListItemStrings.NEWREQTITLES.length; i++) 
      { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("mainrow",ListItemStrings.NEWREQTITLES[i]); 
       map.put("subrow",ListItemStrings.NEWREQCHILDLIST[i]); 
       fillMaps.add(map); 
       }   



      sAdapter = new SimpleAdapter (this.getActivity(), fillMaps 
        , R.layout.simple_list_item_checkable_1, 
        from, new int[] {R.id.text1, R.id.text2}); 
      newReqList.setAdapter(sAdapter); 
      searchBar.addTextChangedListener(filterTextWatcher); 
    } 

    private TextWatcher filterTextWatcher = new TextWatcher() 
    { 

     public void afterTextChanged(Editable s) 
     { 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) 
     { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, 
       int count) 
     { 
      sAdapter.getFilter().filter(s); 
      sAdapter.notifyDataSetChanged();   
     } 


    }; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View v = inflater.inflate(R.layout.newreqscrlayout, container,false); 
     return v; 
    }   
} 

Может кто-нибудь, пожалуйста, помогите мне, чтобы узнать, что случилось?

ответ

0

Я решил это, создав пользовательский SimpleAdapter.
Мой список состоит из элемента и подэлемента. Метод SimpleAdapter performFiltering() также фильтровал текст подэлемента и, следовательно, добавлял каждый элемент дважды. Выполнение цикла выполнялось только после получения результата.

Смежные вопросы