0

各行がメインアイテムとサブアイテムで構成されるリストがあります。ユーザーが検索編集テキストに入力すると、フィルターを使用してリストを更新しています。リスト内の項目を入力すると、入力したアルファベットに従って表示されますが、各項目は 2 回表示されます。以下は私のコードです:

  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;
     }        
}

誰が何が間違っているのかを知るのを手伝ってもらえますか?

4

1 に答える 1

0

カスタムSimpleAdapterを作成して解決しました。
私のリストはアイテムとサブアイテムで構成されています。SimpleAdapter メソッドの performFiltering() は、サブアイテム テキストもフィルタリングしていたため、各アイテムを 2 回追加していました。ループを 1 回だけ実行すると、結果が得られました。

于 2012-03-15T09:22:55.580 に答える