Spinner를 사용하려고 어댑터까지 연결했지만 Spinner에 연결된 ArrayList의 목록들이 보이기만 하고 선택이 되지 않았다 이렇게 Spinner에 정상적으로 ArrayList의 값이 나오지만 선택을 하면 어떤 반응도 없다 이 문제는 Spinner에 어댑터를 연결할 때 리스트가 비어있는 상태여서 생긴 문제이다 따라서 ArrayList에 변동사항이 생겼다면 어댑터에 변동을 알리기만 하면 해결되는 문제였다 adapter.notifyDataSetChanged(); 리스트에 원소를 추가한 후 위의 코드 한 줄만 실행하면 정상적으로 Spinner의 값이 선택된다
안드로이드 프로그래밍을 하다보면 startActivity(intent)로 액티비티 전환을 할 때가 있다 여기서 뒤로가기를 누르면 이전 액티비티로 돌아가게 되는데 이러한 동작을 막기 위해 뒤로가기 액티비티를 없애고 싶을 때가 있다 이를 manifest에서 지정하는 방법이 있지만 주로 사용하는 방법은 intent에 플래그를 지정하는 방법이다 Intent intent = new Intent(this, NextActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); CLEAR_TASK와 NEW_TASK 플래그오 인해 액티비티..
xml로 레이아웃을 구성하면 쉽고 눈에 잘 확인할 수 있는 장점이 있다 다만 고정적으로 필요한 요소들만 만들어두어야 한다 그렇다면 필요에 의해 만들어야 하는 요소들은 자바 코드로 프로그래밍 해야 한다 LinearLayout linearLayout = new LinearLayout(getContext()); linearLayout.serOrientation(LinearLayout.HORIZONTAL); LinearLayout.LayoutParams layoutparams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTNETN); button.setLayoutPa..
액티비티에서 특정 작업을 수행한 후에 프래그먼트를 생성하기를 원할 때가 있다 하지만 레이아웃에서 프래그먼트의 id를 지정하기 때문에 바로 프래그먼트를 만든다 이렇게 되면 프래그먼트에 null 값이 전달되어 오류로 인한 강제종료 문제가 발생할 수 있다 이 문제는 간단하게 해결이 가능하다 액티비티에서 Fragment를 바로 만들도록 레이아웃에서 Fragment를 넣을 것이 아니라 FrameLayout을 넣으면 해결된다 android:name="com.example.application.MyFragment"를 통해 프래그먼트의 onCreateView() 함수를 호출하기 때문에 생기는 문제이다 FrameLayout으로 수정하면 프래그먼트의 onCreateView()를 호출하지 않기 때문에 문제가 생기지 않는다 ..
파이어베이스의 Timestamp는 연도는 1900년을 기준으로 누적된 값을 이용하고 월은 0 ~ 11의 값을 이용한다 따라서 Timestamp를 이용한 쿼리 작성은 연도에서 1900을 뺀 값을 이용해야 한다 public void searchData(int year, int month, int dayOfMonth) { db.collection("books") .whereLessThan("timestamp", new Timestamp(new Date(year - 1900, month, dayOfMonth + 1))) .whereGreaterThanOrEqualTo("timestamp", new Timestamp(new Date(year - 1900, month, dayOfMonth))) .get() .add..
액티비티에서 프래그먼트를 생성할 때 값을 전달해야 할 때가 있다 간단하게 생성자를 이용해서 전달하려고 했지만 안드로이드에서 이러한 방식이 지원되지 않는다 따라서 Bundle 객체를 이용해서 전달하는 방법을 이용한다 MyFragment myFragment = new MyFragment(); Bundle bundle = new bundle(1); // 파라미터의 숫자는 전달하려는 값의 갯수 bundle.putString("key", "value"); myFragment.setArgument(bundle); 이와 같이 코드를 입력하면 액티비티에서 프래그먼트로 값이 전달된다 이 값을 이용하기 위해서 프래그먼트에선 간단한 코드 한 줄로 얻어낼 수 있다 String str; Bundle bundle = getArg..
안드로이드 어플에서 비밀번호를 관리해야 할 일이 있어 해싱 함수를 적용했다 java에서도 같은 방식으로 이용할 수 있다 public String hashing(String str) { String result; try { MessageDigest sh = MessageDigest.getInstance("SHA-256"); sh.update(str.getBytes()); byte byteData[] = sh.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < byteData.length; i++) { sb.append(Integer.toString(byteData[i] & 0xff + 0x100, 16).substring(1)); } r..
파이어베이스의 컬렉션에 임의의 이름을 가진 문서를 추가하려고 한다 처음에는 별도의 추가 함수가 존재할 것이라 생각했지만 파이어베이스 도큐먼트에서 확인해보니 문서를 추가하면 자동으로 컬렉션이 만들어진다고 한다 Map data = new HashMap(); db.collection("books") .add(data) .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(DocumentReference documentReference) { } }); 위의 코드를 살펴보면 "books" 컬렉션에 data 문서를 추가하게 된다 "books" 컬렉션이 존재하고 있다면 그 안에 문서를 추가하겠지만 컬렉션이 존재하지 않는 상태라면..
파이어베이스의 FireStore를 사용하다보면 쿼리 검색의 결과를 Query로 돌려준다 Query에서 원하는 필드의 값을 얻는 방법은 의외로 간단하다 db.collection("books").document(group).collection("contents") .whereLessThan("timestamp", new Timestamp(new Date(year - 1900, month, 0))) .whereGreaterThanOrEqualTo("timestamp", new Timestamp(new Date(year - 1900, month - 1, 0))) .get() .addOnSuccessListener(new OnSuccessListener() { @Override public void onSucce..
- Total
- Today
- Yesterday
- recyclrView
- Android Studio
- 안드로이드 여백
- android
- RecyclerView 여백
- activity
- java
- 프래그먼트
- Alfred
- wrap_content
- 파이어베이스
- 에그타이머
- 안드로이드
- round border
- 안드로이드 레이아웃
- androidx
- layout
- RecyclerView Swipe
- 액티비티
- 안드로이드 스튜디오
- RecyclerView padding
- calendarView
- eggtimer
- 뒤로가기
- 스튜디오
- 파이어스토어
- Firebase
- firestore
- 레이아웃
- intent
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |