全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android ListView实现单选及多选等功能示例

本文实例讲述了Android ListView实现单选及多选等功能的方法。分享给大家供大家参考,具体如下:

在项目中也遇到过给ListView的item添加选择功能。比如一个网购APP,有个历史浏览页面,这个页面现点击item单选/多选及全选删除功能。

当时也是通过在数据中添加一个是否选择的字段来记录item的状态,然后根据这个字段有相应的position位置进行选择状态更改及删除操作。

刚刚看了Android API Demos中17种ListView的实现方法,发现ListView自身就带有我们所需要的单选,多选功能而且实现起来相当方便。

/**
 * 单选或多选功能ListView
 * @description:
 * @author ldm
 * @date 2016-4-21 上午10:44:37
 */
public class SingleChoiceList extends ListActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_single_choice, GENRES));
    final ListView listView = getListView();
    listView.setItemsCanFocus(false);
    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//添加这一句话,就实现单选功能
      //listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//添加这一句话,就实现多选功能
  }
  private static final String[] GENRES = new String[] {
    "Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
    "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
  };
}

/**
 * 长按多选,添加了选择模式
 * @description:
 * @author ldm
 * @date 2016-4-21 上午10:47:55
 */
public class ChoiceModeList extends ListActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ListView lv = getListView();
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    lv.setMultiChoiceModeListener(new ModeCallback());
    setListAdapter(new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_checked, mStrings));
  }
  @Override
  protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    getActionBar().setSubtitle("Long press to start selection");
  }
  private class ModeCallback implements ListView.MultiChoiceModeListener {
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.list_select_menu, menu);
      mode.setTitle("Select Items");
      setSubtitle(mode);
      return true;
    }
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
      return true;
    }
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
      switch (item.getItemId()) {
      case R.id.share:
        Toast.makeText(ChoiceModeList.this, "Shared " + getListView().getCheckedItemCount() +
            " items", Toast.LENGTH_SHORT).show();
        mode.finish();
        break;
      default:
        Toast.makeText(ChoiceModeList.this, "Clicked " + item.getTitle(),
            Toast.LENGTH_SHORT).show();
        break;
      }
      return true;
    }
    public void onDestroyActionMode(ActionMode mode) {
    }
    public void onItemCheckedStateChanged(ActionMode mode,
        int position, long id, boolean checked) {
      setSubtitle(mode);
    }
    private void setSubtitle(ActionMode mode) {
      final int checkedCount = getListView().getCheckedItemCount();
      switch (checkedCount) {
        case 0:
          mode.setSubtitle(null);
          break;
        case 1:
          mode.setSubtitle("One item selected");
          break;
        default:
          mode.setSubtitle("" + checkedCount + " items selected");
          break;
      }
    }
  }
  private String[] mStrings = Cheeses.sCheeseStrings;
}

当我们通过以上这些方法实现ListView选中之后,我们可以把对应的item位置记录下来,就可以对相应地数据进行操作了

/**
 * 带悬浮提示框的ListView
 *
 * @description:
 * @author ldm
 * @date 2016-4-21 上午10:55:51
 */
public class List9 extends ListActivity implements ListView.OnScrollListener {
  private final class RemoveWindow implements Runnable {
    public void run() {
      removeWindow();
    }
  }
  private RemoveWindow mRemoveWindow = new RemoveWindow();
  Handler mHandler = new Handler();
  private WindowManager mWindowManager;
  private TextView mDialogText;
  private boolean mShowing;
  private boolean mReady;
  private char mPrevLetter = Character.MIN_VALUE;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    setListAdapter(new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, mStrings));
    getListView().setOnScrollListener(this);
    LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mDialogText = (TextView) inflate.inflate(R.layout.list_position, null);
    mDialogText.setVisibility(View.INVISIBLE);
    mHandler.post(new Runnable() {
      public void run() {
        mReady = true;
        WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_APPLICATION,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);
        mWindowManager.addView(mDialogText, lp);
      }
    });
  }
  @Override
  protected void onResume() {
    super.onResume();
    mReady = true;
  }
  @Override
  protected void onPause() {
    super.onPause();
    removeWindow();
    mReady = false;
  }
  @Override
  protected void onDestroy() {
    super.onDestroy();
    mWindowManager.removeView(mDialogText);
    mReady = false;
  }
  public void onScroll(AbsListView view, int firstVisibleItem,
      int visibleItemCount, int totalItemCount) {
    if (mReady) {
      char firstLetter = mStrings[firstVisibleItem].charAt(0);
      if (!mShowing && firstLetter != mPrevLetter) {
        mShowing = true;
        mDialogText.setVisibility(View.VISIBLE);
      }
      mDialogText.setText(((Character) firstLetter).toString());
      mHandler.removeCallbacks(mRemoveWindow);
      mHandler.postDelayed(mRemoveWindow, 3000);
      mPrevLetter = firstLetter;
    }
  }
  public void onScrollStateChanged(AbsListView view, int scrollState) {
  }
  private void removeWindow() {
    if (mShowing) {
      mShowing = false;
      mDialogText.setVisibility(View.INVISIBLE);
    }
  }
  private String[] mStrings = new String[] { "Abbaye de Belloc",
      "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi",
      "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu",
      "Airag", "Airedale", "Aisy Cendre", "Allgauer Emmentaler",
      "Alverca", "Ambert", "American Cheese", "Ami du Chambertin",
      "Beenleigh Blue", "Beer Cheese", "Bel Paese", "Bergader",
      "Bergere Bleue", "Berkswell", "Beyaz Peynir", "Bierkase",
      "Bishop Kennedy", "Blarney", "Bleu d'Auvergne", "Bleu de Gex",
      "Bleu de Laqueuille", "Bleu de Septmoncel", "Bleu Des Causses",
      "Blue", "Blue Castello", "Blue Rathgore", "Blue Vein (Australian)",
      "Blue Vein Cheeses", "Bocconcini", "Bocconcini (Australian)",
      "Boeren Leidenkaas", "Bonchester", "Bosworth", "Bougon",
      "Boule Du Roves", "Boulette d'Avesnes", "Boursault", "Boursin",
      "Bouyssou", "Bra", "Braudostur", "Breakfast Cheese",
      "Brebis du Lavort", "Brebis du Lochois", "Brebis du Puyfaucon",
      "Bresse Bleu", "Brick", "Brie", "Brie de Meaux", "Brie de Melun",
      "Brillat-Savarin", "Brin", "Brin d' Amour", "Brin d'Amour",
      "Brinza (Burduf Brinza)", "Briquette de Brebis",
      "Briquette du Forez", "Broccio", "Broccio Demi-Affine",
      "Brousse du Rove", "Bruder Basil",
      "Brusselae Kaas (Fromage de Bruxelles)", "Bryndza",
      "Buchette d'Anjou", "Buffalo", "Chevrotin des Aravis",
      "Chontaleno", "Civray", "Coeur de Camembert au Calvados",
      "Coeur de Chevre", "Colby", "Cold Pack", "Comte", "Coolea",
      "Cooleney", "Coquetdale", "Corleggy", "Cornish Pepper",
      "Cotherstone", "Cotija", "Cottage Cheese",
      "Cottage Cheese (Australian)", "Cougar Gold", "Coulommiers",
      "Coverdale", "Crayeux de Roncq", "Cream Cheese", "Cream Havarti",
      "Crema Agria", "Crema Mexicana", "Creme Fraiche", "Crescenza",
      "Croghan", "Crottin de Chavignol", "Crottin du Chavignol",
      "Crowdie", "Crowley", "Cuajada", "Curd", "Cure Nantais",
      "Curworthy", "Cwmtawe Pecorino", "Cypress Grove Chevre",
      "Danablu (Danish Blue)", "Danbo", "Danish Fontina",
      "Daralagjazsky", "Dauphin", "Delice des Fiouves",
      "Denhany Dorset Drum", "Derby", "Dessertnyj Belyj", "Devon Blue",
      "Devon Garland", "Dolcelatte", "Doolin", "Doppelrhamstufel",
      "Dorset Blue Vinney", "Double Gloucester", "Double Worcester",
      "Dreux a la Feuille", "Dry Jack", "Garrotxa", "Gastanberra",
      "Geitost", "Gippsland Blue", "Gjetost", "Gloucester",
      "Golden Cross", "Gorgonzola", "Gornyaltajski", "Gospel Green",
      "Gouda", "Goutu", "Gowrie", "Grabetto", "Graddost",
      "Grafton Village Cheddar", "Grana", "Grana Padano", "Grand Vatel",
      "Grataron d' Areches", "Gratte-Paille", "Graviera", "Greuilh",
      "Greve", "Gris de Lille", "Gruyere", "Gubbeen", "Guerbigny",
      "Halloumi", "Halloumy (Australian)", "Haloumi-Style Cheese",
      "Harbourne Blue", "Havarti", "Heidi Gruyere", "Hereford Hop",
      "Herrgardsost", "Herriot Farmhouse", "Herve", "Hipi Iti",
      "Hubbardston Blue Cow", "Hushallsost", "Iberico", "Idaho Goatster",
      "Idiazabal", "Il Boschetto al Tartufo", "Ile d'Yeu",
      "Isle of Mull", "Jarlsberg", "Jermi Tortes", "Jibneh Arabieh",
      "Jindi Brie", "Jubilee Blue", "Juustoleipa", "Kadchgall", "Kaseri",
      "Kashta", "Kefalotyri", "Kenafa", "Kernhem", "Kervella Affine",
      "Kikorangi", "King Island Cape Wickham Brie", "King River Gold",
      "Klosterkaese", "Knockalara", "Kugelkase", "Menallack Farmhouse",
      "Menonita", "Meredith Blue", "Mesost", "Metton (Cancoillotte)",
      "Meyer Vintage Gouda", "Mihalic Peynir", "Milleens", "Mimolette",
      "Mine-Gabhar", "Mini Baby Bells", "Mixte", "Molbo",
      "Monastery Cheeses", "Mondseer", "Mont D'or Lyonnais", "Montasio",
      "Monterey Jack", "Monterey Jack Dry", "Morbier",
      "Morbier Cru de Montagne", "Mothais a la Feuille", "Mozzarella",
      "Mozzarella (Australian)", "Mozzarella di Bufala",
      "Mozzarella Fresh, in water", "Mozzarella Rolls", "Munster",
      "Murol", "Mycella", "Myzithra", "Peekskill Pyramid",
      "Pelardon des Cevennes", "Pelardon des Corbieres", "Penamellera",
      "Penbryn", "Pencarreg", "Perail de Brebis", "Petit Morin",
      "Petit Pardou", "Petit-Suisse", "Picodon de Chevre",
      "Picos de Europa", "Piora", "Pithtviers au Foin",
      "Plateau de Herve", "Plymouth Cheese", "Podhalanski",
      "Poivre d'Ane", "Polkolbin", "Pont l'Eveque", "Port Nicholson",
      "Port-Salut", "Postel", "Pouligny-Saint-Pierre", "Pourly",
      "Prastost", "Pressato", "Prince-Jean", "Processed Cheddar",
      "Provolone", "Provolone (Australian)", "Pyengana Cheddar",
      "Pyramide", "Quark", "Quark (Australian)", "Quartirolo Lombardo",
      "Quatre-Vents", "Quercy Petit", "Queso Blanco",
      "Queso Blanco con Frutas --Pina y Mango", "Queso de Murcia",
      "Queso del Montsec", "Saint-Marcellin", "Saint-Nectaire",
      "Saint-Paulin", "Salers", "Samso", "San Simon", "Sancerre",
      "Sap Sago", "Sardo", "Sardo Egyptian", "Sbrinz", "Scamorza",
      "Schabzieger", "Schloss", "Selles sur Cher", "Selva", "Serat",
      "Seriously Strong Cheddar", "Serra da Estrela", "Sharpam",
      "Shelburne Cheddar", "Shropshire Blue", "Siraz", "Sirene",
      "Smoked Gouda", "Somerset Brie", "Sonoma Jack",
      "Sottocenare al Tartufo", "Soumaintrain", "Sourire Lozerien",
      "Spenwood", "Sraffordshire Organic", "St. Agur Blue Cheese",
      "Stilton", "Stinking Bishop", "String", "Sussex Slipcote",
      "Sveciaost", "Swaledale", "Sweet Style Swiss", "Swiss",
      "Syrian (Armenian String)", "Tala", "Taleggio", "Tamie",
      "Tasmania Highland Chevre Log", "Taupiniere", "Teifi", "Telemea",
      "Testouri", "Tete de Moine", "Tetilla", "Venaco", "Vendomois",
      "Vieux Corse", "Vignotte", "Vulscombe", "Waimata Farmhouse Blue",
      "Washed Rind Cheese (Australian)", "Waterloo", "Weichkaese",
      "Wellington", "Wensleydale", "White Stilton",
      "Zanetti Parmigiano Reggiano" };
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android控件用法总结》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android数据库操作技巧总结》及《Android资源操作技巧汇总》

希望本文所述对大家Android程序设计有所帮助。


# Android  # ListView  # 单选  # 多选  # Android实现弹出列表、单选、多选框  # Android ExpandableListView单选以及多选实现代码  # Android自定义单选多选下拉列表的实例代码  # Android Recyclerview实现多选  # 全选  # 反选  # 批量删除的功能  # Android使用AlertDialog实现的信息列表单选、多选对话框功能  # Android中ListView + CheckBox实现单选、多选效果  # Android实现单选与多选对话框的代码  # Android ListView构建支持单选和多选的投票项目  # Android中创建对话框(确定取消对话框、单选对话框、多选对话框)实例代码  # Android单选多选按钮的使用方法  # 这一  # 操作技巧  # 上午  # 句话  # 进阶  # 看了  # 有个  # 相关内容  # 感兴趣  # 我们可以  # 作了  # 给大家  # 就可  # 当我们  # 中也  # 等功能  # 更多关于  # 所需要 


相关文章: 移民网站制作流程,怎么看加拿大移民官网?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  安徽网站建设与外贸建站服务专业定制方案  定制建站价位费用解析与套餐推荐全攻略  黑客如何利用漏洞与弱口令入侵网站服务器?  如何高效完成自助建站业务培训?  西安大型网站制作公司,西安招聘网站最好的是哪个?  再谈Python中的字符串与字符编码(推荐)  如何通过宝塔面板实现本地网站访问?  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何快速搭建二级域名独立网站?  威客平台建站流程解析:高效搭建教程与设计优化方案  大型企业网站制作流程,做网站需要注册公司吗?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  宝塔建站助手安装配置与建站模板使用全流程解析  如何解决ASP生成WAP建站中文乱码问题?  建站之星如何实现网站加密操作?  建站主机功能解析:服务器选择与快速搭建指南  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  实例解析Array和String方法  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  如何用PHP工具快速搭建高效网站?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  建站主机选择指南:服务器配置与SEO优化实战技巧  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  css网站制作参考文献有哪些,易聊怎么注册?  建站之星免费版是否永久可用?  深圳网站制作案例,网页的相关名词有哪些?  如何规划企业建站流程的关键步骤?  高防服务器如何保障网站安全无虞?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  微信h5制作网站有哪些,免费微信H5页面制作工具?  ,石家庄四十八中学官网?  Android使用GridView实现日历的简单功能  香港服务器网站推广:SEO优化与外贸独立站搭建策略  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何确认建站备案号应放置的具体位置?  c++ stringstream用法详解_c++字符串与数字转换利器  如何快速搭建高效WAP手机网站吸引移动用户?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  淘宝制作网站有哪些,淘宝网官网主页?  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何快速搭建响应式可视化网站?  小程序网站制作需要准备什么资料,如何制作小程序?  怎么将XML数据可视化 D3.js加载XML  如何在宝塔面板中修改默认建站目录?  如何通过主机屋免费建站教程十分钟搭建网站?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。