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();
}
自定義組合佈局,實現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屬性即可。