White Whale Studio

[Android] SDK Tools 22.6.2 버전 업데이트 이후 본문

IT Engineering/Android 혹은 Java

[Android] SDK Tools 22.6.2 버전 업데이트 이후

glorymind 2014. 5. 8. 11:12
반응형

으아아.. 저는 이래서 안드로이드를 선호하지 않습니다.

기술변화가 너무 빨라서 적응하기 힘들어요..ㅠㅠ 

안드로이드 개발자도 아닌데...망할..


어느날 이클립스를 켜보니 안드로이드 SDK 업데이트 하라고 해서 했을뿐인데 맛이 가버리는 이클립스를 보면서 급당황..


이클립스를 새로 받아 정리하고 프로젝트 연결시키니 또 정상적으로 되네요..(아놔;;;)


프로젝트를 새로 시작할게 있어서 새로 만들어보니 이건 무슨... 네이버 지도 API 쓸때 사용해봤던 Fragment가 기본적으로 들어가있는 프로젝트가 생성이 되는 군요..

아.. 짜증납니다.


설명을 해보자면

일단 가장 바탕이 되는 것은 mainActivity입니다. 그 위에 Fragment가 올라가게 되구요.

예전에는 직적 mainActivity에 UI 작업을 수행했었던것에 반해 업데이트 이후에는 Fragment에서 작업을 수행하는 방식입니다.

테스트를 해보니 mainAcitivity에 UI 작업이 안되는 것은 아니더군요. 가능은합니다.

즉, 메인 액티비티와 Fragment 에 모두 UI 작업은 가능하지만 위로 올라오는 것은 Fragment 라는 것이죠.


그림으로 설명하면 다음과 같습니다.



package com.hadong.pfmanager;


import android.app.Activity;

import android.app.ActionBar;

import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.os.Build;


public class MainActivity extends Activity {


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


if (savedInstanceState == null) {

getFragmentManager().beginTransaction()

.add(R.id.container, new PlaceholderFragment()).commit();

}

}


@Override

public boolean onCreateOptionsMenu(Menu menu) {


// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}


@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}


/**

* A placeholder fragment containing a simple view.

*/


// 프래그먼트 요소들을 설정하는 부분 MainActivity 클래스와 같다고 보시면 됩니다.

public static class PlaceholderFragment extends Fragment {


public PlaceholderFragment() {

}


@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment_main, container,

false);

return rootView;

}

}


}


위의 코드를 보시면 아시겠지만,

 Fragment를 설정하는 부분은 PlaceholderFragment class 부분입니다.

메인에서는 Fragment를 자신의 액티비티 위에 올리는 역할을 하는 것같구요.

UI와 Element 이벤트 등등 처리는 PlaceholderFragment 의 onCreateView에서 하시면 됩니다.

이 부분에서는 화면에서 같이 보인다고 mainAcivitiy에 있는 Element들을 불러봤자 소용이 없습니다. 에러가 나게되죠.

즉, fragment_main에 있는 요소들만 불러와서 사용이 가능합니다. 


 fragment_main 위에 있는 버튼을 호출하려면 


onCreateView 소스 내에서 

btnWrite = (Button) rootView.findViewById(R.id.btn_write);

와 같은 식으로 사용하시면 됩니다.

rootView Element에서 fragment_main의 view를 받아오고 해당 view에서 다시 보유하고 있는 요소들을 불러오는 방식이니까요. 이벤트 처리도 동일하게 하시면 됩니다용..



아, 그리고 액티비티를 하나 신규로 생성하시게되면 기본적으로

activity_main.xml, fragment_main.xml 과 같이 한쌍으로 같이 생성이 됩니다.

어디에 뭘 넣어야될지는 앞에서 설명해드렸으니 잘 아시리라 믿습니다.

=============================

finish() 함수 사용방법


코딩을 하다보니 안되는 기능들이 하나둘씩나오는것같군요.

우선 finish() 입니다. 어플을 종료시키기 위한 함수인데 그냥 finish()라고 해서 사용했던 예전에 비해서 업데이트된 이후로는 


getActivity().finish(); 


와 같이 사용해야하는군요. (망헐.. 안드로이드가 점점 싫어집니다.)


이 함수 또한 PlaceholderFragment class 내부에서 사용하셔야 됩니다. 메인이 되는 클래스 내부에서 해당 함수를 호출하니까 에러가 뽝~!!!!! 터지는군요... 


한 가지더.

finish()함수를 적용한 종료 버튼 클릭 후의 클릭 이벤트를 null로 설정해두니 1번 클릭후에는 비활성화된것처럼 클릭이 불가능해지는 현상이 발생하네요.. 이건 제가 잘못짠건 아닌것같은데..

.setPositiveButton 이벤트에서 사용한 것과 동일하게 .setNegativeButton 이벤트도 동일하게 이벤트를 추가해주고

다음과 같이 설정을 해주시면 일단은 문제는 해결됩니다만.. 겁나게 찜찜하네요...


.setNegativeButton("취 소", 

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface arg0,

int arg1) {


btn_exit.setEnabled(true);

btn_exit.setClickable(true);

}


}).show();

==============================





반응형
Comments