2014-04-27 51 views
0

我有以下代碼啓動一個listview有100個選項。此外,它還會激活軟件鍵盤,以便於查找選項。如果我選擇一個選項,所選選項的位置將存儲在字符串數組items []中。問題是,當我通過關鍵字搜索選項時,選擇它然後返回,它指向當前位置不在當前值。ListView使用setTextFilterEnabled選擇的位置

如何預防?

public class MyListActivity extends ListActivity { 
    String[] items; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list); 
     ListView lView = getListView(); 
     lView.setChoiceMode(2); 
     getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
     lView.setTextFilterEnabled(true); 
     items = getResources().getStringArray(R.array.items1); 
     setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_checked, items)); 
    } 
     public void onListItemClick(ListView lv, View v, int position, long id) { 
      lv.setItemChecked(position, lv.isItemChecked(position)); 
      String selectedValue = (String) getListAdapter().getItem(position); 
      Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show(); 
     } 
} 

回答

0

我認爲你應該創建自己的自定義適配器,然後在該適配器只需簡單地重寫getItem(int position)函數返回所需的值。如果你之前沒有做過,那麼看看例如this tutorial

+0

我的代碼和這個一樣[鏈接] http://www.yogeshblogspot.com/how-to-get-selected-items-from-multi-select-list-view/當我搜索時出現問題爲一個選項,然後選擇它(一個或多個),然後用「後退」按鈕返回兩次。選中的框不符合值,但位置。任何人都可以讓我知道在我的代碼中爲了我想要的結果所做的更改嗎? –

0

事實證明,有一個可篩選的適配器不適合任何選擇模式(單個或多個)。唯一的解決辦法是手動維護所選項目的狀態(在您的案例中爲一組或一系列字符串),然後每次更改過濾器時循環遍歷它,以便選擇所需的項目。這已經在這裏詳細描述:Multiple Choice Searchable ListView

你顯然不能使用setTextFilterEnabled()方法,你只需要在你的佈局中添加一個EditText,然後設置一個TextWatcher來獲取所有必要的回調。