오랜만에 포스팅입니다...
너무 바쁜 요즘이지만...
요건 좀 레어한 케이스라서 혹시 나중에 기억안날까봐 적어놓습니다.

탭엑티비티 안에서 작업을 하다보면 여러 난관을 만나게 되는데..ㅡㅡ;;
그 중 하나가 팝업이나 다이얼로그 컨트롤이 힘들다는 점이다.

AlertDialog를 만들때 아래와 같은 Exception을 만났다면?
android.view.WindowManager$BadTokenException ...

new AlertDialog.Builder( MyActivity.this.getParent());

// 위에 MyActivity.this.getParent()부분에 보통 Context나 this.getParent();(액티비티)를 입력하지만 탭 엑티비티는 액티비티들이 그룹으로 관리가 되므로 꼭 이렇게 부모를 찾아 줘야..합니다..

이 글로 인해 저를 포함한 단 한분이라도 도움이 되었으면 좋겠습니다~^^
신고
Posted by 로보찌빠 네롱메롱별인
구글맵에 해당 위치로 이동하고 주소창에

javascript:void(prompt('',gApplication.getMap().getCenter()));

를 입력해서 좌표값을 구할 수 있음.
신고
Posted by 로보찌빠 네롱메롱별인

문자열로 해당 Resource (혹은 레이아웃에 포함된 View) 의 ID 값을 가져온다;

-----------------------------------------------------------------
getResources().getIdentifier(파일명, 디렉토리명, 패키지명);
또는,
getResources().getIdentifier(패키지명:디렉토리/파일명, null, null);
으로도 가능하다.
-----------------------------------------------------------------

String resName = "@drawable/imgEnd";
String packName = this.getPackageName(); // 패키지명
int resID = getResources().getIdentifier(resName, "drawable", packName);

String viewName = "imgViewEnd";
String packName = this.getPackageName(); // 패키지명
int resID = getResources().getIdentifier(resName, "id", packName);


주로 리소스/ 뷰의 이름을 조합형식으로 만들어 가져와야 할 경우에
이 같은 코드를 사용하여 처리할 수 있다.


예를 들어,

for (int i=0; i < 3; i++) {
    String resName = "@drawable/img_" + i;
    // 결론적으로 이미지 리소스 이름은 img_1, img_2, img_3 이 되겠다;
    int resID = getResources().getIdentifier(resName, "drawable", packName);

    ImageView iv = (ImageView)findViewById(R.id.imgView);
    iv.setImageResource(resID); // 이미지뷰의 이미지를 설정한다;
}

이렇게 사용이 가능하다.

신고
Posted by 로보찌빠 네롱메롱별인

1. cmd 창 열기
2. chcp 65001
3. 폰트를 Lucida Console 로 변경.
4. adb logcat
신고
Posted by 로보찌빠 네롱메롱별인

  Intent intent = new Intent();
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  intent.setAction(android.content.Intent.ACTION_VIEW);
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  if (file.getName().endsWith(".pdf")){
 intent.setDataAndType(Uri.fromFile(file), "application/pdf");
  }else if (file.getName().endsWith(".hwp")){
intent.setDataAndType(Uri.fromFile(file), "application/hwp");
  }
  try{
   startActivity(intent);
  }catch(ActivityNotFoundException e){
   util.showLongToast("해당파일을 실항할 수 있는 어플리케이션이 없습니다.\n파일을 열 수 없습니다.");
   e.printStackTrace();
  }
신고
Posted by 로보찌빠 네롱메롱별인
어플 개발 시 저장공간을 정하려면 manifest 파일에 설정을 해두면 된다.
 
예)
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:installLocation="preferExternal"
    ...
>
- preferExternal  : 설치시 외장메모리에 설치 합니다. 외장메모리의 용량이 부족하거나 2.2버전 미만일경우에는 내장에 설치 됨.
- auto : 자동으로 설치 경로를 찾습는것 같습니다. 저같은 경우는 내장으로 먼저 가네요. 사용자가 내장에 설치된 어플을
외장으로 옮길 수 있습니다.

어플을 외장메모리로 옮기는 방법
환경설정 > 응용프로그램 관리 > 해당 어플 선택 > SD카드로 이동

참고로 몇몇 어플들은 외장메모리 이동이 지원이 되질 않습니다.(알람이나 라이브 배경화면 같은..)
참고 : http://developer.android.com/guide/appendix/install-location.html
신고
Posted by 로보찌빠 네롱메롱별인
 
Integer.parseInt( String );

신고
Posted by 로보찌빠 네롱메롱별인
URI에 한글과 공백이 함께있을 때는 아래와 같이 URI를 가공해 주면 됨.
이것 역시 무지 귀찮음;

String sUrl="";
String eUrl="";
sUrl = url.substring(0, url.lastIndexOf("/")+1);
eUrl = url.substring(url.lastIndexOf("/")+1, url.length()); // 한글과 공백을 포함한 부분
eUrl = URLEncoder.encode(eUrl,"EUC-KR").replace("+", "%20");
url = sUrl+ eUrl;
신고
Posted by 로보찌빠 네롱메롱별인


안드로이드 개발중 ListView에 웹에서 가저오는 데이터 띄워주는 동안 동글뱅이 돌아가면서 '잠시만 기다려주세요'라는 메시지를 보여주려다 수십차례 삽질을 했습니다..

webview에서 로딩할 때는 간단하게 되는데 ListView에서 ProgressDialog를 사용하려니까 잘 안되더라구요.
뭐 삽질은 했지만 다른 분들에게 많은 도움을 받았기에 나와 같은 고민을 하고 있는 분이 혹시라도 있으면 조금이나마 도움이 되고자 포스트 합니다.

아래 WatingDialog 클래스로 만들어 봤습니다. 사용법은

WatingDialog waitingDialog = new WatingDialog(context);
waitingDialog.startWaitingDialog("대기 중 보여줄 메시지");

이렇게 WatingDialog 객체를 new해서 startWaitingDialog를 하면 다이얼로그가 보여집니다.
그리고 끝나는 시점에서 waitingDialog.dismissWaitingDialog();를 호출해주면 다이얼로그를 Dismiss할 수 있습니다.
ListView 같은 경우에는 Adapter 에서 getView메소드 마지막 view객체를 return하기 전에 불러주면 다이얼로그가 닫아집니다.

이렇게 만들려면 waitingDialog 객체를 클래스객체로 선언해야 하는데 더 좋은 방법이 있는지는 잘 모르겠습니다.
혹시 더 좋은 방법이나 잘못된 부분을 지적해 주시면 많은 도움이 되겠습니다~ 그럼^^;



public class WatingDialog{
 
 private Context mContext;
 private Handler prgressHandler = new Handler() {
  public void handleMessage(Message msg) {
   //특별히 msg에 대한 처리는 하지 않음.
   watingDialog.dismiss();
  }
 };
 ProgressDialog watingDialog;
 
 public WatingDialog(Context context)
 {
  mContext = context;
 }
 
 /**
  * < WaitingDialog 를 멈추기 위한 메서드. >
  *
  * @author [찌빠]
  */
 public void dismissWaitingDialog(){
  Message msg = prgressHandler.obtainMessage();
  prgressHandler.sendMessage(msg);
 }
 
 /**
  * < WaitingDialog에 Massege를 설정하고 다이어로그를 보여주는 메서드. >
  *
  * @param [msg] [Dialog 에 보여지는 내용]
  * @author [찌빠]
  */
 public void startWaitingDialog(final String msg){
  new Thread(){
      public void run(){
   Looper.prepare();
   watingDialog = (ProgressDialog) onCreateDialog(msg);
   watingDialog.setOnCancelListener(new android.content.DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialog) {
     // 로딩 중에 뒤로가기 버튼이 눌렸을 때 현재 Activity를 finish 해준다.

     ((Activity) mContext).finish();
    }
   });

   watingDialog.show();
       Looper.loop();
      }
     }.start();
 }
 
 /**
  * < startWaitingDialog()시 Dialog를 생성하는 메서드 >
  *
  * @param [msg] [Dialog 에 보여지는 내용]
  * @return [Dialog를 반환함.]
  * @author [찌빠]
  */
 protected Dialog onCreateDialog(String msg) {

  ProgressDialog progressDialog = new ProgressDialog(mContext);
  progressDialog.setMessage(msg);
  progressDialog.setCancelable(true);
  
  return progressDialog;
 }
}

신고
Posted by 로보찌빠 네롱메롱별인

티스토리 툴바