2012-08-30 60 views
0

我有這樣一個自定義適配器:選擇/取消所有CheckedTextView在ListView自定義適配器

adapter = new ArrayAdapter<Item>(this, 
      R.layout.file_manager, R.id.checkedTextItem, 
      fileList) 
      { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      // creates view 
      LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View view = inflater.inflate(R.layout.item, null); 
      view.setFocusable(false); 
      CheckedTextView textView = (CheckedTextView) view 
        .findViewById(R.id.checkedTextItem); 
      // put the image on the text view 
      textView.setCompoundDrawablesWithIntrinsicBounds(
        fileList[position].icon, 0, 0, 0);    
      textView.setTextColor(Color.WHITE); 
      textView.setText(fileList[position].file); 
      if(fileList[position].file.equalsIgnoreCase("select all") & (fileList[position].check == true)) 
      { 
       for(int i =0;i<fileList.length;i++) 
       { 
        fileList[i].setItemCheck(true); 
        chosenFile = fileList[i].file; 
        File sel = new File(path + "/" + chosenFile); 
        if (sel.isFile()) 
         resFiles.add(sel); 
       } 
       resFiles.remove(position); 
      } 
      else if(fileList[position].file.equalsIgnoreCase("select all") & (fileList[position].check == false)) 
      { 
       { 
        for(int i =0;i<fileList.length;i++) 
        { 

         fileList[i].setItemCheck(false); 
        } 

       } 
      } 
      if(fileList[position].icon == R.drawable.directory_icon) 
       textView.setCheckMarkDrawable(null); 
      else if(fileList[position].icon == R.drawable.directory_up) 
       textView.setCheckMarkDrawable(null); 
      if(fileList[position].check == true) 
       textView.setChecked(true); 
      else 
       textView.setChecked(false); 

      // add margin between image and text (support various screen 
      // densities) 
      int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f); 
      textView.setCompoundDrawablePadding(dp5); 

      textView.setFocusable(false); 

      return view; 

     } 
    }; 

我有一個類項目,在那裏我創建布爾域檢查+

public class Item { 


    public String file; 
    public int icon; 
    public boolean check; 

    public Item(String file, Integer icon, boolean check) { 
     this.file = file; 
     this.icon = icon; 
     this.check = check; 
    } 
    public String getItemFile() 
    { 
     return file; 
    } 

    public int getItemIcon() 
    { 
     return icon; 
    } 
    public boolean getItemCheck() 
    { 
     return check; 
    } 


    public void setItemCheck(boolean check) 
    { 
     this.check = check; 
    } 

    public void setItemFile(String file) 
    { 
     this.file = file; 
    } 
    public void setItemIcon(int icon) 
    { 
     this.icon = icon; 
    } 
    public void toggle() 
    { 
     check = !check; 
    } 

    @Override 
    public String toString() { 
     return file + " "+ icon+ " "+ check; 
    } 

}

而我的listView setOnItemClickListener其中我設置項目的檢查狀態,用Item類的toggle()方法點擊該項目

lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> myAdapter, View myView, int myItemInt, long mylng) 
      { 
      //String selectedFromList = (lv.getItemAtPosition(myItemInt).toString()); 
      myView.setFocusable(false); 
      chosenFile = fileList[myItemInt].file; 
      File sel = new File(path + "/" + chosenFile); 
      Log.i("path",sel.toString()); 
      if (sel.isDirectory()) { 

       firstLvl = false; 

       str.add(chosenFile); 

       fileList = null; 
       path = new File(sel + ""); 

       loadFileList(); 
       lv.setAdapter(adapter); 

      } 
      else if (chosenFile.equalsIgnoreCase("up") && !sel.exists()) { 

       // present directory removed from list 
       String s = str.remove(str.size() - 1); 

       // path modified to exclude present directory 
       path = new File(path.toString().substring(0, 
         path.toString().lastIndexOf(s))); 
       fileList = null; 
       // if there are no more directories in the list, then 
       // its the first level 

       if (str.isEmpty()) { 
        firstLvl = true; 
       } 
       loadFileList(); 
       lv.setAdapter(adapter); 
      } 
      else 
      { 

       fileList[myItemInt].toggle(); 
       if (fileList[myItemInt].check == true) 
        resFiles.add(sel); 
       else 
        resFiles.remove(sel); 
       adapter.notifyDataSetChanged(); 
       Log.i(fileList[myItemInt].file,Boolean.toString(fileList[myItemInt].check)); 
      } 
    } 

}); 

我想要實現檢查所有CheckedTextView能力。我嘗試做它在我getView()適配器的方法。我可以檢查所有項目,但問題未勾選。因爲當我在聲明中稱fileList[i].setItemCheck(false);當選擇「選擇全部」項檢查狀態是假的,我不能點擊檢查所有項目。我怎樣才能以更好的方式實現這一點?

回答

0

我改變setOnItemClickListener方法解決它。是的問題是,我想查一下我的loadFileList()方法,該方法確定是否所有的可檢查狀態的所有項目,但我應該處理單檢查和所有的代碼的不同部分檢查。現在我做的setOnItemClickListener的else語句......它看起來像這樣:

  else 
      { 

       fileList[myItemInt].toggle(); 
       if(fileList[myItemInt].file.equalsIgnoreCase("select all") & (fileList[myItemInt].check == true)) 
       { 
        String selectAllFile = fileList[myItemInt].file; 
        File all = new File(path + "/" + selectAllFile); 
        for(int i =0;i<fileList.length;i++) 
         { 
          chosenFile = fileList[i].file; 
          File select = new File(path + "/" + chosenFile); 
          fileList[i].setItemCheck(true); 


          if (select.isFile()) 
           {   
            resFiles.add(select); 
            resFiles.remove(all); 

           } 

         } 

        adapter.notifyDataSetChanged(); 
       } 

       else if(fileList[myItemInt].file.equalsIgnoreCase("select all") & (fileList[myItemInt].check == false)) 
       { 
        for(int i =0;i<fileList.length;i++) 
        { 

         fileList[i].setItemCheck(false); 

        } 
        adapter.notifyDataSetChanged(); 
       } 
       if (fileList[myItemInt].check == true) 
        { 
        resFiles.add(sel); 
        if(fileList[myItemInt].file.equalsIgnoreCase("select all")) 
          { 
           String selectAllFile = fileList[myItemInt].file; 
           File all = new File(path + "/" + selectAllFile); 
           resFiles.remove(all); 
          } 
        } 
       else 
       resFiles.remove(sel); 
       adapter.notifyDataSetChanged(); 
       Log.i(fileList[myItemInt].file,Boolean.toString(fileList[myItemInt].check)); 
      } 
    } 

}); 
相關問題