지식메모




안드로이드에서 레이아웃이나 버튼 이미지 뷰 등등 xml에서 제어 가능한 부분을 조건에 따라 보여주고 숨길 수 있는 방법이 있었다.




layout.setVisibility(View.VISIBLE);

해당 뷰를 보여줌


layout.setVisibility(View.INVISIBLE);

해당 뷰를 안 보여줌(공간은 존재)


layout.setVisibility(View.GONE);

해당 뷰를 안 보여줌(공간마저 감춤)




INVISIBLE과 GONE의 차이는 공간을 보여주느냐 안 보여주느냐의 차이이다.




예를 들면 1 2 3 4 5 의 숫자가 있을때 3을 숨기려고 한다면


INVISIBLE은 1 2 " " 4  5 이런 식으로 3은 없지만 자리는 남아있고


GONE은 1 2 4 5 이런 식으로 3과 공간 모두 숨기게 된다.




사용 예로



LinearLayout layout = (LinearLayout) findViewById(R.id.first);
LinearLayout layout2 = (LinearLayout) findViewById(R.id.second);
LinearLayout layout3 = (LinearLayout) findViewById(R.id.third);

switch (checkedId) {

case R.id.button:

	
	layout.setVisibility(View.VISIBLE);
	layout2.setVisibility(View.INVISIBLE);
	layout3.setVisibility(View.GONE);



이렇게 사용하면 id가 button 인 버튼을 누르면 

id가 first인 레이아웃은 보여지고

second 레이아웃은 보이지 않고 그냥 빈 공간만 나오게 되며

third 레이아웃은 아예 삭제된듯이 숨겨지게 된다.




그리고 버튼을 선택하기전에 초기상태에서 숨기려면 직접 xml 파일로 가서 해당 레이아웃에


android:visibility="gone" 


옵션을 주면 처음부터 보여지지 않게 된다.



레이아웃 뿐만 아니라 버튼이나 이미지 뷰 텍스트 뷰 등등 여러가지도 적용할 수 있다.





예전에 쓰던 컴퓨터에서 하드만 빼서 외장하드로 쓰고 있다.


그래서 파티션이 나누어져 있었는데 합치는 방법을 찾다가 윈도우 7에서 할 수 있는 기능을 알게 되었다.





먼저 외장하드G드라이브가 잡힌 모습이 보인다.

이걸 두 개의 파티션으로 나누려고 한다.







내컴퓨터에서 오른쪽 클릭을 해서 관리 메뉴로 들어간다.







그럼 다음과 같은 창이 뜨는데

G드라이브가 보이고 하단에 디스크1 로 G드라이브가 잡혀 있는 걸 볼 수 있다.









G드라이브를 우클릭해서 볼륨축소 메뉴로 들어간다.









그럼 다음과 같은 창이 뜨는데 축소할 공간 입력에 나누고픈 용량을 입력해준다.

100기가를 입력해보았다.










축소를 하고 나면 위에 드라이브 목록에는 나뉜 공간이 뜨지 않는데 아직 인식을 못하기 때문이다.

(하단에 보면 할당되지 않은 공간이라고 떠있다.  또 100기가 아니라 97.66인 건 컴퓨터가 인식할 때 이러저러한 이유가 있어서 정상적인 현상이다)


그래서 하단 디스크 1 에서 할당되지 않음이라고 떠있는 곳에 마우스를 대고 우클릭을 한다.


새 단순 볼륨으로 들어간다.







그럼 마법사가 시작되는데 그냥 계속 진행해주면 된다.

다음





여기서는 자동으로 최대 값이 입력되어있으므로 다음




다음






볼륨레이블에 이름을 정해줘도 되고 안 해줘도 된다.

(안 해주면 "새 볼륨"이라고 자동 입력되어있따.)


끝!







마침을 누르고 나면 잠시 포맷을 수행한다.







포맷이 끝나면 저장소2 라는 드라이브가 새로 생겼다!!






이제 다시 합쳐보자. 저장소2를 우클릭하고 볼륨삭제로 들어간다.






과감히 예를 눌러준다.







그럼 드라이브 목록에는 사라지게 되고 하단에는 할당되지 않음이라고 뜬다.






나머지 저장소도 똑같이 지워준다. 그럼 목록에서 다 사라지고 하단에는 용량이 합쳐진 상태로 할당되지 않음으로 뜬다.






이제 하단에 디스크 1에 우클릭을 해주고 새 단순 볼륨으로 들어간다.







자동으로 최대 값으로 되어있으니 다음





이것도 다음





이름을 지어주고




완료!





그럼 잠시 포맷을 진행하고...





드라이브 목록에 뜨면서  하단에는 저장소라 뜬다. 

나는 외장하드라서 작업이 끝나자마자 인식이되어서 자동실행 창이 떴다.




요약하자면

파티션을 두 개 이상으로 나누고 싶으면 나누는 작업을 반복하면 되고

하나로 합치고 싶을때는 모든 파티션을 다 삭제 후 합쳐진 파티션을 새 볼륨으로 만들어 주면 된다.


윈도우 7 에서 파티션 나누고 합치기 끝!!





안드로이드 EditText 에디트텍스트 값 남겨두기



다음 액티비티로 넘어갔다가 다시 전 액티비티로 돌아올 때 입력했던 EditText 값을 그대로 놔두고 싶다면

intent 호출 부분에



Intent intent = new Intent(this, SecondActivity.class);

startActivity(intent);

finish();


 finish(); 이걸 지워주면 된다.

액티비티 종료 코드를 없애주면 되는 것이다.

난 예제만 보고 따라하느라 그냥 썼다가 값이 안 남길래 삽질을 했었다.

알고보니 간단한 거였다.. 








ObjectNode 와 JsonNode의 차이가 뭔지 몰랐는데 이런 차이라고 한다.



Json으로 나타난 정보에서


[ ]

표시로 시작되는 건 배열이기 때문에 Arraynode 이며


{ }

표시로 시작하는 건 Json 값이기 때문에 JsonNode 이다



그런데 JsonNode는 값을 불러올 수는 있지만 넣을 수는 없기 때문에


값을 넣기 위해서는 ObjectNode를 사용한다.


ObjectNode는 값을 불러오고 넣을 수도 있다.



요약하면


JsonNode 는 값을 읽을 수만 있고 ObjectNode는 값을 읽고 쓸 수 있다.


Json 사용법 링크

http://yonoo88.tistory.com/322









'지식메모 > JAVA' 카테고리의 다른 글

숫자 천단위 콤마 입력하기  (0) 2014.09.25
Json의 이해  (0) 2013.11.05
대문자 소문자 서로 변환하기  (0) 2013.10.08
java 문자열 구분자로 자르기  (0) 2013.10.02
ObjectNode 와 JsonNode 차이?  (0) 2013.09.06
mp3 ID3 v2 태그 파싱하기  (2) 2013.08.27

vim 문자열 찾기

2013.09.02 21:08



vim 처음 실행 후 

또는 편집 중이었다면 ESC를 눌러 편집모드를 빠져 나온 후


/찾을 문자열

?찾을 문자열


을 하면 찾을 수 있다. 

예를 들어 apple을 찾는다면


/apple

?apple


이라고 치면 apple 문자열을 찾는다.


여기서 / 는 위에서 아래로

? 는 아래에서 위로 찾는다. 필요에 따라 알맞게 쓰면 된다.


검색결과를 더 보려면 

다음 문자열 찾기인 n 을 누르면 되고

역방향으로 찾으려면 대문자 N 을 누르면 된다.








티스토리 기본 글자 간격은 왠지 빽빽하게 보여서 답답한 감이 있었다.


그래서 글자간격을 수정해보았다.


글자 간격을 설정하기 전의 모습

 


수정을 하기위해 관리자 페이지에 HTML/CSS 편집 을 들어간다.

거기서 하단에 있는 style.css 에서 수정을 하는데

본문 이라고 검색하면 두번째로 /* 본문 */ 라고 주석처리 되어있는 부분으로 간다.

2번째 줄부터 밑의 소스를 볼 수 있는데 마지막 부분에

letter-spacing:2px

이 코드를 추가해주자. 숫자는 본인에게 맞게 수정하면 된다.

.wrap_cont .desc {width:/*@post-width:-12=*/788px/*@*/;color:/*@post-body-color=*/#000000/*@*/;font-family:/*@post-body-font-family=*/inherit/*@*/;margin-bottom:17px;font-size:/*@post-body-font-size=*/12px/*@*/;line-height:2.0em;clear:both;letter-spacing:2px




2px로 설정한 모습

 









iframe 바꿔주는 사이트가 있네요

이게 더 편하고 각 옵션들은 아래에 참고해서 쓰시면 될듯 합니다.

http://nuridol.net/ut_convert.html


유튜브는 세계최고의 동영상 저장소라고 볼 수 있다.


게다가 요즘은 엔터테인먼트 회사나 공중파도 유튜브 계정을 만들어 영상을 올리고 있어서 웬만한 영상들은 찾아서 볼 수 있다. 

특히 나는 공중파의 가요프로그램 영상을 볼 수 있다는게 좋았다. 옛날 추억의 노래와 그 무대를 볼 수 있어서다.

화질도 깨끗해서 이 영상을 좀 더 많은 사람들과 나누고파 퍼오려고 하는데 화면도 작게 나오고 화질도 나쁘게 나왔다.


그래서 검색해서 화면도 크고 깨끗하게 퍼오는 법을 알아보았다.





언젠가부터 많은 사람들이 오가는 커뮤니티나 사이트에서는 iframe 태그를 막아 놓았다. 

사람들이 막 다른 나쁜 사이트 링크를 걸어 놓거나 악용하는 소지가 많기 때문이라고 한다.

다음 카페도 iframe으로 퍼가면 화면에 나타나지 않고 

싸이월드 블로그는 아예 html 모드를 없애버렸다.

그래서 싸이 블로그에서는 외부컨텐츠 모드를 이용해서 주소입력을 해서 퍼오기만 가능하다.

(티스토리도 글쓰기에 외부컨텐츠 기능이 있다. 근데 영상이 나오지 않는다. 뭐지..)




싸이 블로그 글쓰기 화면

외부컨텐츠를 누르면 다음과 같이 주소입력하는 창이 뜬다.





저 부분에 유튜브에 공유 탭을 누르면 나오는 주소를 넣으면 된다.


아니면 주소 바로 위에 각 SNS 아이콘이 있는데 이걸로 공유하기를 해도 된다.




하지만 이걸로 공유하게 되면

아래 사진 처럼 이렇게 영상이 작게 공유 된다.




그래서 좀 더 크고 좋은 화질로 공유하려고 하면 이전코드소스를 사용해서 퍼오는게 좋다.

공유->소스코드 탭을 누르면 iframe 소스코드로 되어있다.


여기서 이전소스코드사용을 체크해주면 소스코드가 바뀌게 된다.



사이즈 크기도 선택할 수 있다.


저 소스를 복사해서 글쓰기를 할 때 html 모드에서 붙여넣기 하면된다. 

하지만 화질은 기본화질로 재생된다.




영상사이즈에 맞게 고화질로 재생시켜주기 위해서는 소스코드에 추가로 옵션을 주어야 한다.

만약 HD 720p 로 재생하고 싶다면

&vq=hd720

HD 1080p 로 재생하고 싶다면

&vq=hd1080

을 추가해주면 된다.

(※ &는 여러 옵션을 추가해주기 위한 구분자이다)


위 영상의 소스코드에 추가한다면


<object width="1280" height="720"><param name="movie" value="//www.youtube.com/v/ufsrgE0BYf0?version=3&amp;hl=ko_KR&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="//www.youtube.com/v/ufsrgE0BYf0?version=3&vq=hd720&amp;hl=ko_KR&amp;rel=0" type="application/x-shockwave-flash" width="1280" height="720" allowscriptaccess="always" allowfullscreen="true"></embed></object>


이런 식으로 embed 소스 줄에 version=3뒤나 &amp 앞에 추가 해주면 된다. 

(아니면 물음표 뒤에 바로 vq=hd720 이라고 추가해도 된다.)



그리고 화면 사이즈는 시청자가 전체화면 보기로 해서 보면 상관은 없지만 

그냥보는 시청자를 위해 720 화질이면 

width="1280" height="720"

1080화질이면

width="1920" height="1080"

이런식으로 바꿔주는게 좋다.



또 자동으로 재생해주고 싶다면 같은자리에

&autoplay=1 

이라고 추가해주면 된다.



그럼 고화질로 자동재생하라고 하고 싶으면

&vq=hd720&autoplay=1

을 추가해주면 된다.



그리고 또 하나

어떤 유튜브 영상은 이전소스코드를 지원하지 않는 경우가 있다. 또 위 소스를 해도 영상이 안나오면 이 방법을 써보면 해결될 것이다.

그럴 경우에는 


저 표시된 부분을 이용하면 된다.

영상마다 고유한 주소를 갖는데 저게 그 주소이다.

저 부분을 복사해서


 <embed width="640" height="360" src="https://www.youtube.com/v/고유주소&vq=hd720&autoplay=1&start=60&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"></embed>

고유주소 부분에 붙여넣으면 iframe 영상도 재생할 수 있다.


예제


위 영상은 아래 소스이다.

<embed width="640" height="480" src="https://www.youtube.com/v/ufsrgE0BYf0?vq=hd720&autoplay=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true">


1920 1080 사이즈하면 너무 커져서 블로그 글 사이즈를 넘어가게 된다. 하지만 화질은 1080 으로 아주 좋다. 

영상바 아래에 화면설정을 보면 1080으로 설정되어있다


한 가지 팁!

&start=60

이거는 영상 시작지점을 지정하는건데 초 단위이다.

1분이면 60, 3분이면 180 이런식으로 초로 계산해서 넣어주면 된다.




  1. cspby 2014.11.09 01:33

    정말 정말 유용하게 쓰고 있습니다. 감사합니다!ㅎㅎ

  2. mtree 2015.04.28 14:46

    좋은 정보 감사합니다! ㅎㅎ

    • yonoo88 2015.04.28 14:50 신고

      감사합니다. 하지만 더 좋은 곳이 있네요
      http://nuridol.net/ut_convert.html

      일로 들어가시면 iframe을 단번에 이전소스코드로 바꿔줍니다.

      옵션은 위에 설명된 대로 수정해주시면 되구요

  3. billiboi 2015.05.14 14:37

    오 이런 꿀팁을 여직까지 몰랐다니 ㅎㅎ HD 로 자동 플레이 검색하다가 찾아왔네요 ㅎ 좋은 정보감사합니다.

  4. 오야붕 2016.01.30 00:47

    안녕하세요? 좋은 꿀팁 잘 알아갑니다. 한가지 더 궁금하게 있는데 요즘은 60프레임까지 유튜브가 지원하잖아요
    자동으로 60프레임으로 나오게 할수는 없는건가요? 요거만 알면 완벽할거 같은데요

    • yonoo88 2016.01.30 02:50 신고

      60프레임은 아마 업로더가 원본을 60프레임으로 올려야 되지 않을까 생각되네요

    • 오야붕 2016.01.30 11:38

      당연히 60프레임 영상을 말씀드리는겁니다 ^^
      제가 올린 영상을 아프리카방송국에 대문에 올리려고하는데
      60프레임으로 안나오네요 그래서 질문 드려봤습니다.
      한파는 지나갔지만 여전히 쌀쌀한 날씨입니다. 감기 조심하시고
      주말 잘 보내세요

    • yonoo88 2016.01.30 11:57 신고

      http://m.clien.net/cs3/board?bo_style=view&bo_table=lecture&page=1&wr_id=247328

      여길 참고해보세요. 크롬브라우저만 가능한거 같기도 하네요.
      따로 옵션은 없는 듯 합니다

  5. 싸늘하다 2017.05.03 16:22

    유용하긴 한데 엄청 복잡하다... ㅋㅋ

    • yonoo88 2017.05.03 16:34 신고

      요즈은 자동으로 주소변환해주는 사이트도 있어서 그거쓰는게 편해요 ㅋㅋ


스피너를 이용하여 값을 전달한 후 값에 따른 이미지를 출력하였다.

string.xml에 스피너에 쓰일 목록을 만들어둔다.



<string name="season">시즌</string>
    
    <string name="season_prompt">시즌 선택</string>
    <string-array name="season_array">
        <item>봄</item>
        <item>여름</item>
        <item>가을</item>
        <item>겨울</item>
    </string-array>



그 다음 send.xml



 <Spinner 
         android:id="@+id/spinner_season" <!--스피너 아이디-->
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:prompt="@string/season_prompt"<!-- string.xml에서 작성한 목록 -->
         android:layout_marginRight="10dp"
          />




이렇게 스피너를 만들어준다.



그리고 SendActivity.java 에서 스피너 값을  보내주자 OnCreate 부분에


Spinner spinner = (Spinner)findViewById(R.id.spinner_season);//send.xml의 스피너 아이디
		
		ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.season_array,
				android.R.layout.simple_spinner_item);
		
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		spinner.setAdapter(adapter);



이렇게 스피너를 선언해주고 Onclick메소드에 스피너 값을 인텐트에 태워 보낸다.


String str_season = spinner.getSelectedItem().toString();	
	 	
 Intent it3 = new Intent(this,ReceiveActivity.class);
			 
	 
			 
 it3.putExtra("it3_season", str_season);	//it3_season 이라는 스트링으로 str_season 값을 넘긴다.	 
 
startActivity(it3);





이제 스피너 값에 따른 이미지를 출력하기 위해 receive.xml 에

이미지 뷰를 만들었다


  <ImageView
       android:id="@+id/season_year"
       		
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"     
                      
       />




이제 ReceiveActivity.java 에서 받아보자.

마찬가지로 OnCreate 부분에



Intent it3=getIntent();		//인텐트를 받아오고
		
		String str_season= it3.getStringExtra("it3_season"); //it3_season으로 보내온 값을 str_season에 저장
		
		ImageView season = (ImageView)findViewById(R.id.season_year); //사진을 출력할 이미지뷰
		if(str_season.equals("봄")){ //str_season 값이 봄이라면
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.spring); //봄 사진 가져와서
			season.setImageDrawable(img_season);//봄 사진 출력
		}else if(str_season.equals("여름")){
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.summer);
			season.setImageDrawable(img_season);
		}else if(str_season.equals("겨울")){
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.autumn);
			season.setImageDrawable(img_season);
		}else if(str_season.equals("가을")){
			BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.winter);
			season.setImageDrawable(img_season);
		}



여기서 애를 먹었던게 if 값을 그냥 평소 하던대로

if(str_season == "봄") 이런식으로 해줬는데 안되서 찾아보니까 String 값은

str_season.equals("봄")  

이런식으로 해줘야 했다.


이제 스피너로 봄 값이 넘어오면 이미지뷰에 봄 사진을 넣어주고 여름이면 여름사진을 보여준다.

아 소스코드 태그 은근 귀찮네..






  1. 뿌잉뿌잉 2013.10.26 22:35

    Intent it3 = new Intent(this,ReceiveActivity.class); 에서 오류가 생겨서 this를 getApplicationContext()로 바꿔줬는데요
    소스창에서 에러가 뜨지는 안는데 시뮬레이션에서 에러가뜨네요 ㅜㅜ this를 바꿔준게 문제일까요??ㅜㅜ

    • yonoo88 2013.10.26 23:54 신고

      오류 메세지가 어떤건지 알려주실 수 있나요? 도움이 된다면 드리고 싶네요

  2. 으악 2013.11.09 09:07

    저는 this를 sendActivity.this 로 바꾸고 실행시켰더니 OnClick 메소드에서 오류가 뜨네요ㅠㅠ
    OnItemClicked로도 바꿔봤는데 spinner 와 같이 쓸수 없다는 에러가 떠요ㅜㅜ 그부분도 코드 올려주실수 있나요?

    • yonoo88 2013.11.09 00:12 신고

      글대로 해도 오류가 났나요? 혹시 로그캣 에러메시지를 알려주실 수 있나요? 저는 딱 위 글처럼 했거든요.

    • 으악 2013.11.09 01:33

      java.lang.RuntimeException: Unable to start activity componentInfo: java.lang.RuntimeException:Don't call setOnClickListener for an adapterView. 이렇게 떠요ㅜㅜ

    • yonoo88 2013.11.09 01:49 신고

      저 로그캣메시지만 나오나요? 전체 메시지를 봤으면 해서요

      로그캣 메시지 중 아랫쪽 부분에 프로젝트내 액티비티와 소스 몇번째 코드인지 나와있는 부분이나 널 포인트 에러메시지가 있다면 더 문제알기가 쉬울꺼 같습니다.

      혹시나 참고가 되는 글이 있나요?
      검색 링크 입니다.
      https://www.google.co.kr/search?q=Don't+call+setOnClickListener+for+an+adapterView&oq=Don't+call+setOnClickListener+for+an+adapterView&aqs=chrome..69i57&sourceid=chrome&espv=210&es_sm=122&ie=UTF-8#es_sm=122&espv=210&newwindow=1&q=Don't+call+setOnClickListener+for+an+adapterView&tbas=0

    • 으악 2013.11.09 09:08

      11-08 23:57:19.334: E/dalvikvm(752): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
      11-08 23:57:58.653: E/AndroidRuntime(752): FATAL EXCEPTION: main
      11-08 23:57:58.653: E/AndroidRuntime(752): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.itm.android/com.itm.android.Fragment02}: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1797)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.widget.TabHost.setCurrentTab(TabHost.java:346)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.view.View.performClick(View.java:3511)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.view.View$PerformClick.run(View.java:14105)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.os.Handler.handleCallback(Handler.java:605)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.os.Handler.dispatchMessage(Handler.java:92)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.os.Looper.loop(Looper.java:137)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.ActivityThread.main(ActivityThread.java:4424)
      11-08 23:57:58.653: E/AndroidRuntime(752): at java.lang.reflect.Method.invokeNative(Native Method)
      11-08 23:57:58.653: E/AndroidRuntime(752): at java.lang.reflect.Method.invoke(Method.java:511)
      11-08 23:57:58.653: E/AndroidRuntime(752): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
      11-08 23:57:58.653: E/AndroidRuntime(752): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
      11-08 23:57:58.653: E/AndroidRuntime(752): at dalvik.system.NativeStart.main(Native Method)
      11-08 23:57:58.653: E/AndroidRuntime(752): Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.widget.AdapterView.setOnClickListener(AdapterView.java:761)
      11-08 23:57:58.653: E/AndroidRuntime(752): at com.itm.android.Fragment02.onCreate(Fragment02.java:65)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.Activity.performCreate(Activity.java:4465)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
      11-08 23:57:58.653: E/AndroidRuntime(752): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
      11-08 23:57:58.653: E/AndroidRuntime(752): ... 18 more
      11-09 00:03:04.966: E/AndroidRuntime(800): FATAL EXCEPTION: main
      11-09 00:03:04.966: E/AndroidRuntime(800): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.itm.android/com.itm.android.Fragment02}: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.ActivityThread.startActivityNow(ActivityThread.java:1797)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.widget.TabHost.setCurrentTab(TabHost.java:346)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:150)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:540)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.view.View.performClick(View.java:3511)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.view.View$PerformClick.run(View.java:14105)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.os.Handler.handleCallback(Handler.java:605)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.os.Handler.dispatchMessage(Handler.java:92)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.os.Looper.loop(Looper.java:137)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.ActivityThread.main(ActivityThread.java:4424)
      11-09 00:03:04.966: E/AndroidRuntime(800): at java.lang.reflect.Method.invokeNative(Native Method)
      11-09 00:03:04.966: E/AndroidRuntime(800): at java.lang.reflect.Method.invoke(Method.java:511)
      11-09 00:03:04.966: E/AndroidRuntime(800): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
      11-09 00:03:04.966: E/AndroidRuntime(800): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
      11-09 00:03:04.966: E/AndroidRuntime(800): at dalvik.system.NativeStart.main(Native Method)
      11-09 00:03:04.966: E/AndroidRuntime(800): Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.widget.AdapterView.setOnClickListener(AdapterView.java:761)
      11-09 00:03:04.966: E/AndroidRuntime(800): at com.itm.android.Fragment02.onCreate(Fragment02.java:65)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.Activity.performCreate(Activity.java:4465)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
      11-09 00:03:04.966: E/AndroidRuntime(800): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
      11-09 00:03:04.966: E/AndroidRuntime(800): ... 18 more

    • yonoo88 2013.11.09 12:53 신고

      저도 아직 초보라 도움이 되실련지 모르겠지만
      로그캣에서
      11-08 23:57:58.653: E/AndroidRuntime(752): at com.itm.android.Fragment02.onCreate(Fragment02.java:65)
      이부분이 있는데 65번째 줄 소스코드가 어떻게 되나요?

      초반에 스피너 호출하는 부분인거같은데

      Spinner spinner = (Spinner)findViewById(R.id.spinner_season);//send.xml의 스피너 아이디

      ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.season_array,
      android.R.layout.simple_spinner_item);

      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      spinner.setAdapter(adapter);

      이 소스코드 부분이 아닐까 생각해봅니다.
      그리고 스피너로 어떤 기능을 만드시는 건가요

  3. 안녕하세요^^ 2013.12.19 16:18

    질문이있습니다!
    스피너를 2개 이상 쓸 때는 인텐트를 어떻게 해야하나요? 여러번 시도해봤는데 어떻게 하는건지 모르겠네요ㅠㅠ
    예를 들어 시즌뿐만 아니라 스포츠 사진을 스피너를 통해 더 넣고 싶다던지.. 한데 둘다 어떻게 하면 넘길 수 있을까요ㅠ

    • yonoo88 2013.12.20 00:05 신고

      인텐트는 하나만 쓰시면 되고

      스포츠사진을 넘겨줄 값을 하나 더 만드시면됩니다.

      위 예제에서는
      it3.putExtra("it3_season", str_season);
      이런식으로 시즌 값을 보냈따면

      스포츠사진에 사용할 스피너를 하나 더 만드시고
      it3.putExtra("it3_sportsImg", str_sportsImg);
      이런식으로 보내시면 됩니다.


      인텐트는 장바구니 같은거라고 보시면됩니다.
      그 안에 스피너 값, 텍스트 값 등등이 들어가는거죠

+ Recent posts