2010-11-03 62 views
6

朋友,android單選列表選擇問題?

我使用下面的代碼,以顯示與單選按鈕 列表現在我想通過默認設置,以便使用不工作,爲setSelection屬性來選擇列表中的特定單選按鈕。

final String [] items=new String[]{"Item1","Item2","Item3","Item4"}; 
      ArrayAdapter<string> ad=new ArrayAdapter<string>(this,android.R.layout.simple_list_item_single_choice,items); 
      list=(ListView)findViewById(R.id.List); 
      list.setAdapter(ad); 

list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
list.setSelection(2); 
    list.setOnItemClickListener(new OnItemClickListener() 
      { 

     public void onItemClick(AdapterView arg0, View arg1, int arg2, 
     long arg3) { 
     // TODO Auto-generated method stub 
     TextView txt=(TextView)findViewById(R.id.txt); 
     txt.setText(list.getItemAtPosition(arg2).toString()); 


     } 

      } 
      ); 

請指導我在做什麼錯誤?

回答

6

我可能會完全關閉,但我認爲setSelection不需要檢查您的項目(如在複選框或收音機中),但它會導航到它。

作爲一種解決方法(也許有更優雅的解決方案),您可以擴展ArrayAdapter並在getView()方法中手動進行檢查。

添加像這樣到類:

private static class MArrayAdapter extends ArrayAdapter<String> { 
    public Adapter(final Context context, final String[] objects) { 
     super(context, android.R.layout.simple_list_item_single_choice, objects); 
    } 

    @Override 
    public View getView(final int position, final View convertView, final ViewGroup parent) { 
     final CheckedTextView view = (CheckedTextView) super.getView(position, convertView, parent); 
     view.setChecked(position == 2); 
     return view; 
    } 

} 

,改變你得到一個適配器new MArrayAdapter(this, items);

P.S.方式 在我以前的評論,我的錯誤,你最好打電話setChoiceMode(它只是在我的應用程序,我打電話給notifyDataSetChanged,所以我真的不需要它)。我認爲你的行爲在沒有選擇模式的情況下會出現一些奇怪的行爲。

31

找你找:

list.setItemChecked(2, true); 
+0

BINGO!這正是我所需要的。實際上,我想調用setItemChecked(檢查它)和setSelection(將項目放入視圖中)。 – 2012-05-27 18:11:26