일단 제가 간단하게 만들어봤는데 단순하게 버튼 클릭시 랜덤하게 번호 좌석을 줍니다. Show 중복값을 비교할 대상이 뭔지 몰라서 그냥 배경색이 빨간색인 경우 그 자리는 이미 예약되었다라고 짜봤습니다. 근데 1-5번까지 모두 다 빨간색으로 변했을 경우에는 혹시 모든 좌석이 예약 되었습니다. 이런 메시지를 텍스트 뷰에 나타내는게 가능할까요? 그리고 배경색이 아닌 다른걸로 중복값을 찾을 수 있나요? public class MainActivity extends AppCompatActivity { Random Number; String Rnumber = " "; private TextView[]txt; // single dimensional array @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnFirst = (Button)findViewById(R.id.btnFirstClass); btnFirst.setOnClickListener(new View.OnClickListener() { LinearLayout l = (LinearLayout) findViewById(R.id.L1); // get the reference @Override public void onClick(View v) { // String[] a = new String[5]; TextView result = (TextView)findViewById(R.id.txtResult); txt = new TextView[5]; Number = new Random(); Rnumber = "0" + (Number.nextInt(5) +1); for (int i = 0 ; i < l.getChildCount() ; i++) { //getChildCount() returns the # of Obj txt[i] = (TextView) l.getChildAt(i); ColorDrawable cd = (ColorDrawable)txt[i].getBackground(); if(Rnumber.equals(txt[i].getText())) { if(cd.getColor() == Color.RED) { Toast.makeText(MainActivity.this, txt[i].getText() + "this seat is booked", Toast.LENGTH_SHORT).show(); result.setText(Rnumber + "this seat is booked. click again"); break; } else { txt[i].setBackgroundColor(Color.RED); result.setText("your seat is" + Rnumber); } } // Toast.makeText(MainActivity.this, txt[i].getText() + " and " + Rnumber,Toast.LENGTH_SHORT).show(); } } }); } } 제 프로그램 스샷은 다음과 같습니다.
반복 알람 예약컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.알람( 알람에는 다음 특징이 있습니다.
참고: 애플리케이션이 실행 중인 동안 발생하는 시간 기반
작업은 장단점 이해하기반복 알람은 제한된 유연성을 가진 비교적 단순한 메커니즘입니다. 특히 네트워크 작업을 트리거하는 앱에는 최선이 아닐 수도 있습니다. 알람을 잘못 설계하면 배터리 소모가 발생하고 서버에 큰 부담을 줄 수 있습니다. 앱이 실행 중이 아닌 상태에서 작업을 트리거하는 일반적인 시나리오는 데이터를 서버와 동기화하는 것입니다. 이것이 반복 알람을 사용하려는 한 가지 예입니다. 하지만, 앱 데이터를 호스팅하는 서버를 보유하고 있다면
동기화 어댑터와 함께 Google 클라우드 메시징(GCM)을 사용하는 것이 기기가 잠자기 모드에서 유휴 상태일 때는 알람이 울리지 않습니다. 예약된 알람은 기기가 잠자기 모드를 종료할 때까지 지연됩니다. 기기가 유휴 상태일 때도 작업을 완료해야 하는 경우 사용할 수 있는 몇 가지 옵션이 있습니다. 권장사항반복 알람 디자인과 관련된 모든 선택은 앱이 시스템 리소스를 사용(또는 오용)하는 방식에 영향을 줄 수 있습니다. 예를 들어 서버와 동기화되는 인기 앱을 생각해보세요. 동기화 작업이 시계 시간을 기반으로 하고 앱의 모든 인스턴스가 오후 11시에 동기화된다면 서버의 부하로 지연 시간이 늘어나거나 '서비스 거부'가 발생할 수 있습니다. 알람 사용에 대한 권장사항은 다음과 같습니다.
반복 알람 설정위에서 설명한 대로 반복 알람은 정기적인 이벤트 또는 데이터 조회를 예약하는 데 적합합니다. 반복 알람은 다음과 같은 특성을 갖습니다.
알람 유형 선택반복 알람 사용 시 가장 먼저 고려할 사항 중 하나는 알람 유형입니다. 알람에는 '실제 경과 시간'과 '실시간 시계'(RTC)의 두 가지 일반적인 시계 유형이 있습니다. 실제 경과 시간은 '시스템 부팅 이후 시간'을 참조로 사용하며 실시간 시계는 UTC(실제 시간) 시간을 사용합니다. 실제 경과 시간은 시간대/언어의 영향을 받지 않기 때문에 경과 시간에 기반한 알람(예: 30초마다 실행되는 알람)을 설정하는 데 적합합니다. 실시간 시계 유형은 현재 언어에 따라 달라지는 알람에 더 적합합니다. 두 가지 유형 모두 화면이 꺼져 있을 때 기기에서 CPU의 절전 모드를 해제하는 'wakeup' 버전이 있습니다. 이렇게 하면 예약된 시간에 알람이 실행됩니다. 이는 특정 작업을 수행하는 시간이 제한된 경우와 같이 앱에 시간 종속성이 있는 경우에 유용합니다. Wakeup 버전의 알람 유형을 사용하지 않으면 기기가 다음에 켜질 때 모든 반복 알람이 실행됩니다. 특정 간격으로(예: 30분마다) 알람을 실행해야 한다면 실제 경과 시간 유형 중 하나를 사용합니다. 일반적으로 유형이 더 좋습니다. 알람이 하루 중 특정 시간에 실행된다면 시간 기반의 실시간 시계 유형 중 하나를 선택하세요. 그러나 참고로 이 접근 방식은 사용자가 기기의 시간 설정을 변경한 경우 앱이 다른 언어로 잘 번역하지 못할 수도 있고 알람이 앱에서 예상치 못한 동작을 일으킬 수도 있는 단점이 있습니다. 또한 실시간 시계 알람 유형을 사용하면 위에서 설명한 것처럼 제대로 확장되지 않습니다. 가능하다면 '실제 경과 시간' 사용을 권장합니다. 다음은 유형 목록입니다.
실제 경과 시간 알람의 예다음은 다음과 같이 30분 후와 그 이후 30분마다 기기의 절전 모드를 해제하여 알람을 실행합니다.
다음과 같이 1분 후에 기기의 절전 모드를 해제하여 일회성 알람(반복 없음)을 실행합니다.
실시간 시계 알람의 예다음은 대략 오후 2시에 기기의 절전 모드를 해제하여 알람을 실행하고 하루에 한 번씩 동일한 시간에 반복합니다.
정확히 오전 8시 30분에 기기의 절전 모드를 해제하여 알람을 실행하고 그 후 20분마다 반복합니다.
알람이 얼마나 정확해야 하는지 결정위에서 설명한 것처럼 알람을 만드는 첫 번째 단계는 알람 유형을 선택하는 것입니다. 차이는 알람이 얼마나 정확해야 하는가입니다. 대부분의 앱은 드물게 정확한 시간을 요구하는 앱(예: 알람이 정확히 오전 8시 30분에 실행되고 그 후 매시 정각마다 실행됨)은
알람 취소앱에 따라 알람을 취소하는 기능을 포함할 수도 있습니다. 알람을 취소하려면 알람 관리자의
기기가 다시 시작되면 알람 시작기본적으로 기기를 종료하면 모든 알람이 취소됩니다. 이런 상황을 방지하려면 사용자가 기기를 재부팅할 때 자동으로 반복
알람을 다시 시작하도록 애플리케이션을 디자인해야 합니다. 이렇게 하면 사용자가 알람을 수동으로 다시 시작하지 않아도 단계는 다음과 같습니다.
잠자기 및 앱 대기가 미치는 영향Android
6.0(API 수준 23)에는 기기 배터리 수명을 연장하기 위해 잠자기 및 앱 대기가 도입되었습니다. 기기가 잠자기 모드일 때 모든 표준 알람은 기기가 잠자기 모드를 종료하거나 유지보수 기간이 시작될 때까지 지연됩니다. 잠자기 모드에서 알람을 실행해야 한다면 Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates. Last updated 2020-07-06 UTC. [{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"필요한 정보가 없음" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"너무 복잡함/단계 수가 너무 많음" },{ "type": "thumb-down", "id": "outOfDate", "label":"오래됨" },{ "type": "thumb-down", "id": "translationIssue", "label":"번역 문제" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"샘플/코드 문제" },{ "type": "thumb-down", "id": "otherDown", "label":"기타" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"이해하기 쉬움" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"문제가 해결됨" },{ "type": "thumb-up", "id": "otherUp", "label":"기타" }] |