android篩選城市條件控件Listview+CheckBox單選和多選切換

由于項(xiàng)目需求需要用到這個(gè)功能,通過(guò)兩天的時(shí)間自己弄出來(lái)了,首先我們看一下效果我們選擇參團(tuán)城市的時(shí)候是單選功能,選擇線路玩法的時(shí)候我們進(jìn)行多選功能。

01111.gif

1.首先這是一個(gè)PopupWindow的彈窗布局主要是兩個(gè)listview組合而成這里不多說(shuō),想必大家都知道,這里我只提供思路,具體實(shí)現(xiàn)還是靠自己這樣才能有所進(jìn)步
主要的難點(diǎn)是怎么判斷什么時(shí)候單選什么時(shí)候多選,這里我用到了一個(gè)標(biāo)識(shí),就是切換的時(shí)候傳遞一個(gè)數(shù)據(jù)做判斷就好,也很簡(jiǎn)單,接下來(lái)展示一下重要代碼:
在左邊lietview適配器創(chuàng)建一個(gè)方法setSelectedPosition ()用于判斷點(diǎn)擊的是哪個(gè)item
點(diǎn)擊左邊listview中item

lelf_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {   
 @Override    
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
  String str1[] = cityString1.split(","); 
if (selectedPosition == 0) {  //
for (int i = 0; i < str1.length; i++) {  
 list1.add(str1[i]);  
adapter_right.notifyDataSetChanged();   
adapter_right.Type1();//點(diǎn)擊第一個(gè)進(jìn)行傳遞數(shù)據(jù)type=1    
 adapter_right.getIds().clear(); 
 adapter_right.CleanCheckBox();  
    }   
   }   
 Log.e("selectedPosition", selectedPosition + "===");  
 if (selectedPosition == 1) { 
   adapter_right.Type(); ////點(diǎn)擊第二個(gè)進(jìn)行傳遞數(shù)據(jù)type=2
   adapter_right.getIds().clear(); 
 adapter_right.CleanCheckBox(); 
adapter_right.notifyDataSetChanged(); 
 }   
  adapter_left.setSelectedPosition(position);
 adapter_left.notifyDataSetInvalidated();
 }});

下面是右邊的適配器 重要的部分已經(jīng)做了注釋

 public RightAdapter() {   
   this.mInflater = LayoutInflater.from(MainActivity.this);   
 isSelected = new HashMap<>();  
isSelected_one = new HashMap<>();   
 beSelectedData_map = new ArrayList<>(); 
 for (int i = 1; i < list1.size(); i++) {  
 isSelected.put(i, false);
 }  
 isSelected_one.put(0, true);
beSelectedData_map.add(0, list1.get(0)); 
} 
 public ArrayList<String> getIds() {  
 return beSelectedData_map;  
 } 
public void Type() { //接收到的消息
 type = 2;
 } 
  public void Type1() { //接收到的消息
type = 1; 
 }  
public void CleanCheckBox() { for (int i = 1; i < list1.size(); i++) { 
 isSelected.put(i, false); 
 }  
  isSelected_one.put(0, true); 
beSelectedData_map.add(0, list1.get(0)); 
  }  
 @Override 
public int getCount() {
return list1.size();
}  
 @Override 
 public Object getItem(int position) {
 return list1.get(position);
 }  
@Override
public long getItemId(int position) { 
return position;
 } 
@Override  
public View getView(final int position, View convertView, ViewGroup parent) { 
   if (convertView == null) { 
 convertView = mInflater.inflate(R.layout.rightitem, null);
} 
  LEFT_TV.setText(list1.get(position)); 
  final int pos = position;
  LL_linear.setOnClickListener(new View.OnClickListener() {    
   @Override
 public void onClick(View v) {  
 //獲取map中對(duì)應(yīng)位置的布爾值,取其相反值(因?yàn)辄c(diǎn)擊一次我們要改變其狀態(tài))                                                 if (pos != 0) {
 isSelected_one.put(0, false);  
if (beSelectedData_map.contains(list1.get(0))) {   
 beSelectedData_map.remove(list1.get(0));  
}  
 boolean isSelect = !isSelected.get(pos);//   先將所有的置為FALSE(通過(guò)遍歷HashMap將所有CheckBox對(duì)應(yīng)的布爾值都設(shè)為false)單選操作  
  if (type == 2) {  
 for (Integer p : isSelected.keySet()) {  
  isSelected.put(p, false); 
   }   
   }        
// 再將當(dāng)前選擇CB的實(shí)際狀態(tài) 
  isSelected.put(position, isSelect);  
         notifyDataSetChanged();   
 Log.e("====type=====", type + "");  
  if (type == 2) {  
  beSelectedData_map.clear(); //單選操作   
   } 
 if (isSelect) {   
beSelectedData_map.add(list1.get(position));   
Log.e("已選城市", list1.get(position));  
    } else { 
if(beSelectedData_map.contains(list1.get(position))) {    
    beSelectedData_map.remove(list1.get(position));    
   }   
}

到這里就結(jié)束了,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,159評(píng)論 25 708
  • 一個(gè)ListView通常有兩個(gè)職責(zé)(1)將數(shù)據(jù)填充到布局(2)處理用戶的選擇點(diǎn)擊等操作 一個(gè)ListView的創(chuàng)建...
    183207efd207閱讀 1,787評(píng)論 0 7
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,358評(píng)論 0 17
  • 天氣陰沉得就像 整個(gè)城市鍍上了一層灰色 一點(diǎn)點(diǎn)的 占據(jù)天空僅剩的亮光 一個(gè)人閑逛 突然下起雨 抬起頭 豆大的雨水落...
    打紅傘的boy閱讀 231評(píng)論 0 0
  • 最大的幸福是做你父母, 最大的幸福是將你守護(hù), 最大的幸福是抱你入懷, 最大的幸福是看你幸福, 最大的幸福是為你幸...
    Annieba閱讀 259評(píng)論 0 0

友情鏈接更多精彩內(nèi)容