본문 바로가기

코딩

(102)
RxJava와 Room DB 자기 전, 갑자기 생각나서 정리를 해야할 것 같아서 쓰는 ROOM DB와 RxJava의 조합 에 관한 글. Room DB는 Andriod Jetpack에 포함된 SQLite를 대체하는 데이터베이스이다. 특징으로는, 간단한 insert, update, delete 등등의 기본적인 함수를 SQL문을 이용하여 적지 않아도 된다는게 큰 특징이다. 사용해보면 알겠지만 SQLite와 DBHelper를 쓰는 등의 기존 방식보다 훨씬 편리하고 마음이 놓인다는 장점이 있다. 마음이 놓인다는 이유는.. 제가 DB지식이 적어서 SQL문이 오류날까봐 항상 전전긍긍하는데 SQL문을 덜 적어도 되기 때문.. 이다... ㅋㅋㅋ 또한 특징이 하나 더 있는데, RxJava를 연동해서 쓸 수 있다는 점이다. 예를들어, DB에서 getU..
Android Action Mode 안드로이드에서 Text를 Select했을 때 나오는 메뉴에 뭔가 추가하고 싶을 수도 있다. 예를 들면, 이런식으로, Important를 꾹~ 눌려서 (Long press) Text를 Select한 뒤에 나오는 메뉴에서 '퀵번역'을 추가 하고 싶을 수 있다. 이런걸 구현하려고 하면 간단하게 함수 하나만 override하면 된다. @Override public void onActionModeStarted(final android.view.ActionMode mode) { Menu menu = mode.getMenu(); menu.add("퀵번역") .setEnabled(true) .setVisible(true) .setOnMenuItemClickListener(item -> { //해당 메뉴를 눌렸을 때 수..
Android View Stub View Stub란? 레이아웃을 include 태그처럼 외부의 layout을 들고오는건데, 여타 include 태그와는 다르게 동적으로 필요할 때 inflate 할 수 있는 태그이다. 예를 들면 와 같은 main activity layout이 있다고 치자. 그리고 와 같이 my_inflate_layout.xml이 있다고 치자. 이렇게 되면, 액티비티에서는 View inflatedView = ((ViewStub) findViewById(R.id.my_stub)).inflate(); TextView text1 = inflateView.findViewById(R.id.text_view_1) 와 같이 my_inflate_layout을 ViewStub 태그가 있는 위치에 inflate할 수 있다. 또한 my_in..
안드로이드 Picture In Picture (PIP) 깃 헙 주소 : https://github.com/5seunghoon/PipExample PIP기능은 아래와 같다 이렇게 재생되던 동영상을, 홈키같은걸 눌리게 되면 이렇게 작은화면으로 전환되고, 다른 앱 위에서 동영상이 계속 재생될 수 있는 기능이다. 유튜브나 네이버TV등에서 자주 볼 수 있는 기능이다. 이를 간단하게 구현해보자. 먼저 깃헙 주소는 게시글의 최상단에 미리 적어놓았다. 1. 매니패스트의 액티비티 부분을 다음과 같이 수정하자 보면, android:resizeableActivity과 supportPictureInPicture이 설정되어 있는 것을 알 수 있다. 2. 액티비티 xml 수정 먼저 VideoView를 리니어 레이아웃의 최상단에 두고, 스크롤뷰를 그 밑에 둔 다음 그 스크롤뷰에 이것저..
SW expert academy 1824 혁진이의 프로그램 검증 기본적인 풀이는 DFS이다. DP[i][j][memory][direct]는 "i, j의 위치에서 memory의 값을 메모리에 저장해놨을 때, direct로 프로그램이 진행되고 있는 상황에서의 프로그램이 끝날 수 있는 지의 여부"이다.그 결과값이 1이면 끝날 수 있고, 2이면 끝날 수 없음을 의미한다. 혁진이의 프로그램이 무한루프가 돈다는 것은, 같은 memory와 direct의 상황에서 같은 i,j를 방문했다는 것으로 체크하면 된다. #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #inc..
SW expert academy 1238 Contact #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int len, start; int main() { for (int tc = 1; tc > from; cin >> to; adj[from].insert(to); } queue next; bool isVisit[101]; for (int i = 0; i < 101; i++) { isVisit[i] = false; } //isVisit[start] = true; next.push(start); next.pus..
SW expert academy 1227 미로2 #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int len, start; int moves[4][2] = { {-1,0}, {0, -1}, {1, 0}, {0, 1} }; int arr[100][100]; set adj[100][100]; int main() { for (int tc = 1; tc > testcasenum; int starti, startj, endi, endj; for (int i = 0; i < 100; i++) { string ..
SW expert academy 1251 하나로 #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int N; double E; long long node[1000][2]; //i, j 저장 long long adj[1000][1000]; // i j의 비용 int main() { int tcm; scanf("%d", &tcm); for (int tc = 1; tc