2013-07-03 391 views
0

我正在篩選它正常工作的列表視圖。但是當我點擊過濾列表視圖的一個項目時,它給了我原始位置中項目的名稱。已過濾列表查看返回原始位置

實施例: 項目:A,B,C,d,E. 如果I濾波器C,它返回僅1個項目(C),但它示出了,因爲它是位置0

我已經尋找信息,但沒有任何類似的問題幫助我。

這是我的代碼:

final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls); 
list.setOnItemClickListener(new OnItemClickListener() { 

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    // TODO Auto-generated method stub 
    addProfile.setMLSId(mlslist.get(position).getId()); 


    // THIS IS THE LINE THAT GIVES ME THE WRONG RESULT!!! 
    textmls.setText(mlslist.get(position).getName()); 


    mls.setText(""); 
    dialog.dismiss(); 
} 
}); 
list.setAdapter(adapter); 

final EditText filter = (EditText) inflated.findViewById(R.id.et_filter); 
filter.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     adapter.getFilter().filter(s); 
     adapter.notifyDataSetChanged(); 
    } 
}); 

而且FIlteredListViewAdapter:

public class FilteredListviewAdapter extends ArrayAdapter<String> { 

ArrayList<String> list; 

public FilteredListviewAdapter(Context context, int layout, ArrayList<String> array) { 
    super(context, layout, array); 
    list = array; 
} 

@Override 
public String getItem(int position) { 
    return super.getItem(position); 
} 

}

我做錯了什麼?

回答

0

getItem應在位置返回項目的數據集內:

@Override 
public String getItem(int position) { 
    return list.get(position); 
} 
+0

我已經試過了因爲我在另一個問題的評論中看到它,但它不起作用。 如果我把這個句子,這個清單沒有正確過濾。我總是得到原始列表中的N個第一項(取決於我過濾的內容)。 如果有1個物品滿足過濾器,則顯示原始列表的項目0。如果有2個項目,則顯示原始列表的2個第一項。等等。 – trumpetero

1

我終於找到了解決辦法。

適配器的代碼是可以的,因爲我寫了它。

我已經改變了唯一的線在OnItemClickListener,所以現在的代碼是這樣的:

final FilteredListviewAdapter adapter = new FilteredListviewAdapter(AddAgentProfile.this, android.R.layout.simple_list_item_1, arraymls); 
    list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // TODO Auto-generated method stub 
      addProfile.setMLSId(mlslist.get(arraymls.indexOf(adapter.getItem(position))).getId()); 
      textmls.setText(adapter.getItem(position)); 
      mls.setText(""); 
      dialog.dismiss(); 
     } 
}); 
list.setAdapter(adapter); 

現在我調用函數adapter.getItem代替list.get