안드로이드 searchView 관련 메소드들

SearchView의 설정 및 이벤트 처리 리스너 설정은 모두 onCreateOptionsMenu() 메소드에서 한다.

아래 코드는 아래의 이벤트를 설정하는 예제코드이다.

– hint Text 변경

– input Text Color 변경

– hint Text Color 변경

– SearchView의 확장/축소 이벤트 처리

– SearchView에 글자 입력 이벤트 처리

– SearchView 검색 버튼 클릭 시 이벤트 처리

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.action_items_main, menu);
        // SearchView Hint 변경하기
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setQueryHint("검색어를 입력하세요.");
        // SearchView 입력 글자색과 힌트 색상 변경하기
        SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
        searchAutoComplete.setHintTextColor(Color.GRAY);
        searchAutoComplete.setTextColor(Color.WHITE);
        // SearchView 확장/축소 이벤트 처리
        MenuItemCompat.OnActionExpandListener expandListener = new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                Toast.makeText(MainActivity.this"SearchView 확장됐다!!", Toast.LENGTH_LONG).show();
                return true;
            }
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                Toast.makeText(MainActivity.this"SearchView 축소됐다!!", Toast.LENGTH_LONG).show();
                return true;
            }
        };
        MenuItemCompat.setOnActionExpandListener(searchItem, expandListener);
        // SearchView 검색어 입력/검색 이벤트 처리
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                Toast.makeText(MainActivity.this"[검색버튼클릭] 검색어 = "+query, Toast.LENGTH_LONG).show();
                return true;
            }
            @Override
            public boolean onQueryTextChange(String newText) {
                Toast.makeText(MainActivity.this"입력하고있는 단어 = "+newText, Toast.LENGTH_LONG).show();
                return true;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }

출처: http://dev-daddy.tistory.com/12 [대한민국 개발자 아빠]

Advertisements

mysql Auto Increment id 값 재정렬 시

MySQL에서 데이터를 정리하다 보면 auto_increment 값의 충돌로 데이터가 입력이 되지 않는 경우가 있습니다.

이럴 경우 간단히 해결할 수 있는 방법이 있는데요. auto_increment 값을 재지정해주면 쉽게 해결됩니다.

단순히 원하는 값으로 초기화하기를 원하는 경우

ALTER TABLE `TABLENAME` AUTO_INCREMENT=XXXXXX(설정한 인덱스번호);

기존의 ROW들을 재정렬 및 셋팅하기를 원하는 경우

ALTER TABLE `TABLENAME` AUTO_INCREMENT=1;

SET @CNT = 0;

UPDATE `TABLENAME` SET `TABLENAME`.`COLUMNNAME` = @CNT:=@CNT+1;

출처 : http://blog.naver.com/PostView.nhn?blogId=jujac&logNo=220096489653&parentCategoryNo=&categoryNo=10&viewDate=&isShowPopularPosts=true&from=search

삼항 연산자

조건부(삼항) 연산자(?:)

조건에 따라 두 식 중 하나를 반환합니다.

test ? expression1 : expression2
test
임의의 Boolean 식입니다.

expression1
test가 true이면 식이 반환됩니다.쉼표 식이 될 수 있습니다.

expression2
test가 false이면 식이 반환됩니다.둘 이상의 식이 쉼표 식으로 연결될 수 있습니다.

?: 연산자는 if…else 문의 단축형으로 사용할 수 있으며일반적으로 if…else 문을 사용하면 너무 복잡해지는 식에서 사용합니다.예를 들면 다음과 같습니다.

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");

현재 시각이 오후 6시 이후이면 이 예제는 “Good evening.”이라는 문자열을 만듭니다. if…else 문을 사용하여 동일한 기능을 가진 코드를 작성하면 다음과 같습니다.

var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
   greeting += " evening.";
else
   greeting += " day.";

출처 : https://msdn.microsoft.com/ko-kr/library/be21c7hw(v=vs.94).aspx

안드로이드 생애주기에 대해

생애주기에 대한 단편적인 이해만을 가지고 리사이클러뷰 작업을 하던 중이었다.

리스트를 생성하고 그걸 어댑터에 적용시키는 등의 과정을 진행하고 있었는데,

이 과정을 onResume()에 넣을 경우 처음에는 잘 실행이 되지만 그 상태에서 다른 액티비티를 클릭해 이동했다가 취소버튼을 눌러 다시 돌아왔을 때 리사이클러뷰가 나타나지 않는 문제점이 발생했다.

onStart()에 넣어도 마찬가지였다.

그래서 onCreate()에 해당 과정을 넣어봤는데 잘 되는 것이 아닌가. 해서 생명주기에 대해 다시 한 번 자료를 찾아보았다.

http://androidhuman.com/246

여기에 따르면 각 메소드들은 순서만 다른 게 아니라 역할도 각각 다르다.

onCreate()는 나타나는 변수들의 초기화 부분,

onStart()는 초기화된 변수들을 뷰로 그려주는 부분,

onResume()는 그려진 뷰들을 사용자와 상호작용시키는 부분이다.

내가 문제를 일으켰던 어댑터 선언 및 설정의 경우는 초기화 단계이기 때문에 onCreate()에서만 정상적으로 동작한 것이 아닌가 싶다.

AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag 에러

https://stackoverflow.com/questions/3918517/calling-startactivity-from-outside-of-an-activity-context

답은 위에.

액티비티가 아닌 곳에서 startActivity를 호출하는 것을 막아 놓았다. 그렇지만 우리가 사용하는 인텐트에 NEW TASK FLAG를 붙이면 해결된다.

예시) intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

AWS SSH 접속이 안 될때

평소 작업하던 공간이 아닌 다른 곳에서 SSH로 서버 접속을 하다가 실패하는 경우가 있다. 이럴 경우 접속자의 IP가 달라져서 생긴 문제일 수 있으니 서버의 SSH IP 지정을 다시 해 주거나 추가해주면 된다. AWS에서는 인스턴스 – 보안 그룹 – 인바운드 – 편집을 차례로 클릭하면 해당 화면이 등장한다.