国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

詳談Android ListView的選擇模式

2019-10-23 18:31:13
字體:
供稿:網(wǎng)友

效果圖:

android,listview

ListView 定義了choiceMode屬性,描述是這樣的:

用于為視圖定義選擇行為。默認情況下,列表時沒有任何選擇行為的。如果把choiceMode設(shè)置為singleChoice,列表允許有一個列表項處于被選狀態(tài)。如果把choiceMode設(shè)置為multipleChoice,那么列表允許有任意數(shù)量的列表項處于被選狀態(tài)

ListView以某種方式通過Checkable接口處理視圖的選擇狀態(tài),LIstView源碼中有這么一段:

 if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) {      if (child instanceof Checkable) {        ((Checkable) child).setChecked(mCheckStates.get(position));      } else if (getContext().getApplicationInfo().targetSdkVersion          >= android.os.Build.VERSION_CODES.HONEYCOMB) {        child.setActivated(mCheckStates.get(position));      }    }

如果需要ListView處理選擇行為,需要令列表項對應(yīng)的自定義視圖實現(xiàn)Checkable接口,這個需要自定義

創(chuàng)建一個Countries.java

public class Countries { public static final String[] COUNTRIES = new String[] {   "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",   "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda",   "Argentina", "Armenia", "Aruba", "Australia", "Austria",   "Azerbaijan", "Bahrain", "Bangladesh", "Barbados", "Belarus",   "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",   "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil",   "British Indian Ocean Territory", "British Virgin Islands",   "Brunei", "Bulgaria", "Burkina Faso", "Burundi", "Cote d'Ivoire",   "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands",   "Central African Republic", "Chad", "Chile", "China",   "Christmas Island", "Cocos (Keeling) Islands", "Colombia",   "Comoros", "Congo", "Cook Islands", "Costa Rica", "Croatia",   "Cuba", "Cyprus", "Czech Republic",   "Democratic Republic of the Congo", "Denmark", "Djibouti",   "Dominica", "Dominican Republic", "East Timor", "Ecuador",   "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",   "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands",   "Fiji", "Finland", "Former Yugoslav Republic of Macedonia",   "France", "French Guiana", "French Polynesia",   "French Southern Territories", "Gabon", "Georgia", "Germany",   "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada",   "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",   "Guyana", "Haiti", "Heard Island and McDonald Islands",   "Honduras", "Hong Kong", "Hungary", "Iceland", "India",   "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy",   "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati",   "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho",   "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",   "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali",   "Malta", "Marshall Islands", "Martinique", "Mauritania",   "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",   "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique",   "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands",   "Netherlands Antilles", "New Caledonia", "New Zealand",   "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island",   "North Korea", "Northern Marianas", "Norway", "Oman", "Pakistan",   "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",   "Philippines", "Pitcairn Islands", "Poland", "Portugal",   "Puerto Rico", "Qatar", "Reunion", "Romania", "Russia", "Rwanda",   "Sqo Tome and Principe", "Saint Helena", "Saint Kitts and Nevis",   "Saint Lucia", "Saint Pierre and Miquelon",   "Saint Vincent and the Grenadines", "Samoa", "San Marino",   "Saudi Arabia", "Senegal", "Seychelles", "Sierra Leone",   "Singapore", "Slovakia", "Slovenia", "Solomon Islands",   "Somalia", "South Africa",   "South Georgia and the South Sandwich Islands", "South Korea",   "Spain", "Sri Lanka", "Sudan", "Suriname",   "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland",   "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand",   "The Bahamas", "The Gambia", "Togo", "Tokelau", "Tonga",   "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan",   "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",   "Ukraine", "United Arab Emirates", "United Kingdom",   "United States", "United States Minor Outlying Islands",   "Uruguay", "Uzbekistan", "Vanuatu", "Vatican City", "Venezuela",   "Vietnam", "Wallis and Futuna", "Western Sahara", "Yemen",   "Yugoslavia", "Zambia", "Zimbabwe" };}

在view文件夾下創(chuàng)建一個CountryView.java

public class CountryView extends LinearLayout implements Checkable { private TextView mTitle; private CheckBox mCheckBox; public CountryView(Context context) {  this(context, null); } public CountryView(Context context, AttributeSet attrs) {  super(context, attrs);  LayoutInflater inflater = LayoutInflater.from(context);  View v = inflater.inflate(R.layout.country_view, this, true);  mTitle = (TextView) v.findViewById(R.id.country_view_title);  mCheckBox = (CheckBox) v.findViewById(R.id.country_view_checkbox); } public void setTitle(String title) {  mTitle.setText(title); } @Override public boolean isChecked() {  return mCheckBox.isChecked(); } @Override public void setChecked(boolean checked) {  mCheckBox.setChecked(checked); } @Override public void toggle() {  mCheckBox.toggle(); }}

在adapter文件夾下 CountryAdapter

public class CountryAdapter extends ArrayAdapter<Country> { public CountryAdapter(Context context, int textViewResourceId,   List<Country> objects) {  super(context, textViewResourceId, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) {  if ( convertView == null ) {   convertView = new CountryView(getContext());  }  Country country = getItem(position);  CountryView countryView = (CountryView) convertView;  countryView.setTitle(country.getName());  return convertView; }}

在model文件夾下Country.java

public class Country { private String name; public Country() { } public String getName() {  return name; } public void setName(String name) {  this.name = name; }}

主界面

public class Hack30Activity extends Activity {  private ListView mListView;  private CountryAdapter mAdapter;  private List<Country> mCountries;  private String mToastFmt;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_hack30);    createCountriesList();    mToastFmt = getString(R.string.activity_main_toast_fmt);    mAdapter = new CountryAdapter(this, -1, mCountries);    mListView = (ListView) findViewById(R.id.activity_main_list);    mListView.setAdapter(mAdapter);  }  public void onPickCountryClick(View v) {    int pos = mListView.getCheckedItemPosition();    if (ListView.INVALID_POSITION != pos) {      String msg = String.format(mToastFmt, mCountries.get(pos)          .getName());      Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();    }  }  private void createCountriesList() {    mCountries = new ArrayList<Country>(Countries.COUNTRIES.length);    for (int i = 0; i < Countries.COUNTRIES.length; i++) {      Country country = new Country();      country.setName(Countries.COUNTRIES[i]);      mCountries.add(country);    }  }}

country_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:orientation="horizontal" >  <TextView    android:id="@+id/country_view_title"    android:layout_width="0dp"    android:layout_height="wrap_content"    android:layout_weight="0.9"    android:padding="10dp" />  <CheckBox    android:id="@+id/country_view_checkbox"    android:layout_width="0dp"    android:layout_height="wrap_content"    android:layout_weight="0.1"    android:clickable="false"    android:focusable="false"    android:focusableInTouchMode="false"    android:gravity="center_vertical"    android:padding="10dp" /></LinearLayout>

activity_hack30.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical" >  <Button    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:onClick="onPickCountryClick"    android:text="@string/activity_main_add_selection" />  <ListView    android:id="@+id/activity_main_list"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:choiceMode="singleChoice" /></LinearLayout><string name="activity_main_toast_fmt">Chosen country: %s</string>  <string name="activity_main_add_selection">Pick Country</string>

以上這篇詳談Android ListView的選擇模式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀化市| 江口县| 乌拉特前旗| 长沙县| 蒙山县| 宜兰县| 射洪县| 明溪县| 成武县| 仙游县| 托里县| 鄂托克旗| 泸州市| 衡阳市| 博爱县| 惠水县| 德化县| 榆林市| 老河口市| 大石桥市| 察雅县| 怀仁县| 仙游县| 英德市| 东安县| 德保县| 兴安县| 长沙市| 博罗县| 伊宁市| 成安县| 河西区| 龙陵县| 将乐县| 大连市| 治县。| 南乐县| 长岛县| 安顺市| 罗山县| 柞水县|