listView單選實現的兩種方式

1. listview有個屬性

android:choiceMode ="singleChoice" 表示選擇一個  
android:choiceMode ="multipleChoice"表示選擇兩個 

2. 佈局中如下

<Button  
    android:id="@+id/button"  
    android:layout_width= "match_parent"  
    android:layout_height= "wrap_content"  
    android:text= "點擊顯示獲取數字"  
    android:padding="10dp" />  
  
<ListView  
    android:id="@+id/listView"  
    android:layout_below= "@+id/button"  
    android:layout_width= "match_parent"  
    android:layout_height= "match_parent"  
    android:choiceMode="singleChoice" >  
</ListView> 

3. java代碼中爲listview設置adapter,這裏用默認的

private String[] GENRES = { "11", "22" , "33" , "44" , "55" , "66" , "77", "88" , "99" , "00" };  
listView.setAdapter( new ArrayAdapter<String>( this,  
                   android.R.layout.simple_list_item_single_choice , GENRES ));


simple_list_item_single_choice裏的控件是CheckedTextView,其實是一個實現了checkable接口的textView

4.此時listView就有單選效果了,截圖如下:




5. 如何獲取已經選中的數據呢?這裏單選或多選的數據會被控件記住,當我們點擊顯示獲取數字的按鈕時,我們用代碼獲取選中的信息,並顯示

int position = listView .getCheckedItemPosition();     // 即獲取選中位置  
if(ListView.INVALID_POSITION != position){  
     Toast.makeText(MainActivity.this, groups.get(position), 0).show();  
}


上面知道可以使用android自帶的listview的chiocemode的單選模式實現。但那個佈局是系統自帶的checkedTextView,有時候我們需要自己實現佈局,那麼下面我們開始實現

自定義組合佈局,實現checkable接口。

public class SingleView extends LinearLayout implements Checkable {  
  
     private TextView mText;  
     private CheckBox mCheckBox;  
     public SingleView(Context context, AttributeSet attrs, int defStyle) {  
            super(context, attrs, defStyle);  
           initView(context);  
     }  
  
     public SingleView(Context context, AttributeSet attrs) {  
            super(context, attrs);  
           initView(context);  
     }  
  
     public SingleView (Context context) {  
            super(context);  
           initView(context);  
     }  
  
     private void initView(Context context){  
            // 填充佈局  
           LayoutInflater inflater = LayoutInflater.from(context);  
           View v = inflater.inflate(R.layout.item_single_layout , this, true);  
            mText = (TextView) v.findViewById(R.id. title);  
            mCheckBox = (CheckBox) v.findViewById(R.id. checkbox);  
     }  
  
     @Override  
     public void setChecked( boolean checked) {  
            mCheckBox.setChecked(checked);  
             
     }  
  
     @Override  
     public boolean isChecked() {  
            return mCheckBox.isChecked();  
     }  
  
     @Override  
     public void toggle() {  
            mCheckBox.toggle();  
     }  
       
     public void setTitle(String text){  
            mText.setText(text);  
     }  
} 

activity中試下代碼:

public class MainActivity extends Activity {  
     private ArrayList<String> groups;  
     private ListView listView;  
  
     @Override  
     protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
           setContentView(R.layout. activity_main);  
  
            listView = (ListView) findViewById(R.id. listView);  
  
            groups = new ArrayList<String>();  
            groups.add( "11");  
            groups.add( "22");  
            groups.add( "33");  
            groups.add( "44");  
            groups.add( "55");  
            groups.add( "66");  
            groups.add( "77");  
            groups.add( "88");  
            groups.add( "99");  
            groups.add( "00");  
  
           SingleAdapter singleAdapter = new SingleAdapter();  
            listView.setAdapter(singleAdapter);  
  
           Button button = (Button) findViewById(R.id. button);  
           button.setOnClickListener( new OnClickListener() {  
  
                 @Override  
                 public void onClick(View v) {  
                     PickNum();  
                }  
           });  
     }  
  
     private void PickNum() {  
            int position = listView.getCheckedItemPosition();  
            if (ListView. INVALID_POSITION != position) {  
                Toast. makeText(MainActivity.this, groups.get(position), 0).show();  
           }  
     }  
  
     private class SingleAdapter extends BaseAdapter {  
  
            @Override  
            public int getCount() {  
                 return groups.size();  
           }  
  
            @Override  
            public Object getItem( int position) {  
                 // TODO Auto-generated method stub  
                 return null;  
           }  
  
            @Override  
            public long getItemId( int position) {  
                 // TODO Auto-generated method stub  
                 return 0;  
           }  
  
            @Override  
            public View getView( final int position, View convertView,  
                     ViewGroup parent) {  
                 final SingleView singleView = new SingleView(MainActivity.this );  
                singleView.setTitle( groups.get(position));  
                 return singleView;  
  
           }  
  
     }  
} 

效果:



如果要替換默認checkbox的圖標顯示,設置checkbox的button屬性即可。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章