2017-06-14 44 views
0

我有一堆複選框,並且每個複選框都有相同的方法。我想要做的是在第一次檢查該特定複選框時是否有複選框。發生了什麼是我認爲即使複選框沒有被檢查,但其他人仍然在計數器仍在上升。所以,我試圖讓複選框從紅色變爲黃色變爲綠色(它以紅色開始),但是當其中一個複選框被選中時,它變成了我想要的黃色,但是如果我嘗試檢查另一個複選框,它會變成綠色而不是黃色。我嘗試了一個布爾值,但我不確定如何知道該特定複選框是否在第一次被檢查並將計數器設置爲0.如果我在onClick方法中將計數器設置爲0,它將只是保持爲0.所以,我想知道是否有辦法知道該複選框是否被第一次檢查並將其設置爲0.我想效率好我的代碼,並且沒有單獨的計數器複選框。我試圖研究這個問題,但找不到任何幫助。任何幫助都感激不盡。謝謝!Android多個複選框想要檢查它是否第一次點擊

public void checked(CheckBox checkBox){ 
    if (checkBox.isChecked()){ 
     count++; 
    } else if (!checkBox.isChecked()){ 
     checkBox.setChecked(true); 
     count++; 
    } 
    if (count == 1){ 
     checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox); 
    } 
    if (count == 2){ 
     checkBox.setButtonDrawable(R.drawable.custom_green_checkbox); 
    } 
    if (count > 2){ 
     count = 0; 
     checkBox.setButtonDrawable(R.drawable.custom_red_checkbox); 
    } 
} 


chkDownload.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      checked(chkDownload); 
     } 
    }); 

chkGetCalendar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      checked(chkGetCalendar); 
     } 
    }); 

chkStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      checked(chkStart); 
     } 
    }); 
+0

您將需要一個計數器,每個複選框。當你點擊'chkDownload'時,'count'會增加,如果你按下'chkStart',它會再次增加。 – Tony

+0

有沒有辦法讓方法中的計數器像選中一樣(複選框複選框,int計數器),並使單個計數器處於選中該參數(chkStart,count1);檢查(chkDownload,count2);?我不想在每個複選框中放入選中的方法,因爲我覺得效率不高。 – Karna

+0

檢查我的答案,如果這是你正在尋找的 – Tony

回答

0

你可以做的是:

int downloadCount = 0; 
int calendarCount = 0; 
int startCount = 0; 

public void checked(CheckBox checkBox,int count){ 
    if (checkBox.isChecked()){ 
     count++; 
    } else if (!checkBox.isChecked()){ 
     checkBox.setChecked(true); 
     count++; 
    } 
    if (count == 1){ 
     checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox); 
    } 
    if (count == 2){ 
     checkBox.setButtonDrawable(R.drawable.custom_green_checkbox); 
    } 
    if (count > 2){ 
     count = 0; 
     checkBox.setButtonDrawable(R.drawable.custom_red_checkbox); 
    } 
} 


chkDownload.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      checked(chkDownload,downloadCount); 
     } 
    }); 

chkGetCalendar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      checked(chkGetCalendar,calendarCount); 
     } 
    }); 

chkStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      checked(chkStart,startCount); 
     } 
    }); 

編輯

你可以做的,然後是返回的數量,使得它保留它。

如:

public int checked(CheckBox checkBox,int count){ 
    if (checkBox.isChecked()){ 
     count++; 
    } else if (!checkBox.isChecked()){ 
     checkBox.setChecked(true); 
     count++; 
    } 
    if (count == 1){ 
     checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox); 
    } 
    if (count == 2){ 
     checkBox.setButtonDrawable(R.drawable.custom_green_checkbox); 
    } 
    if (count > 2){ 
     count = 0; 
     checkBox.setButtonDrawable(R.drawable.custom_red_checkbox); 
    } 
    return count; 
} 

chkDownload.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     downloadCount = checked(chkDownload,downloadCount); 
    } 
}); 

我不知道你的代碼是什麼樣子,但我剛剛建立了這個和它的作品:

public class MainActivity extends AppCompatActivity { 

    int downloadCount = 0; 
    int calendarCount = 0; 
    int startCount = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final CheckBox chkDownload = (CheckBox) findViewById(R.id.chkDownload); 
     final CheckBox chkGetCalendar = (CheckBox) findViewById(R.id.chkGetCalendar); 
     final CheckBox chkStart = (CheckBox) findViewById(R.id.chkStart); 

     chkDownload.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       downloadCount = checked(chkDownload, downloadCount); 
      } 
     }); 

     chkGetCalendar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       calendarCount = checked(chkGetCalendar, calendarCount); 
      } 
     }); 

     chkStart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startCount = checked(chkStart, startCount); 
      } 
     }); 

    } 

    public int checked(CheckBox checkBox, int count) { 

     if (checkBox.isChecked()) { 

      count++; 

     } else if (!checkBox.isChecked()) { 

      checkBox.setChecked(true); 
      count++; 

     } 

     if (count == 1) { 
      checkBox.setButtonDrawable(R.drawable.ic_menu_camera); 
     } 
     if (count == 2) { 
      checkBox.setButtonDrawable(R.drawable.ic_menu_gallery); 
     } 
     if (count > 2) { 
      count = 0; 
      checkBox.setButtonDrawable(R.drawable.ic_menu_manage); 
     } 
     return count; 
    } 

} 
+0

我曾嘗試過,並且複選框不會變成綠色,因爲count永遠不會初始化。那是我的問題。您是否認爲每次用戶點擊複選框時都有初始化的方法可供初始化? – Karna

+0

@Karna檢查我的編輯 – Tony

+0

第二次點擊時仍然沒有變綠。它仍然是黃色的。我認爲它必須以某種方式進行初始化。我確實將檢查過的方法中的返回類型更改爲int,以便它可以工作並且沒有錯誤,但它仍然無效。抱歉。 – Karna

相關問題