마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 서비스영역에서 대화상자 띄우기

0 추천

제가 서비스영역에서 다이얼로그를 띄울라고하는데 잘안됩니다.

우선 서비스영역의 코드입니다 너무길어서 잡다한부분은 생략했습니다

public class AlwaysOnTopService extends Service {

...
	
	public boolean onTouchEvent(MotionEvent event) {

		return mGestureDetector.onTouchEvent(event);
	}
	@Override
	public IBinder onBind(Intent arg0) { return null; }
	
	@Override
	public void onCreate() {
		super.onCreate();
	
		
	
		mList = new ListPopupWindow(this);
		mList.setWidth(200);
		mList.setHeight(500);
		mList.setAnchorView(iv);

		mList.setAdapter(new TestGridAdapter(this,imgs));
		mList.setModal(true);
		mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long arg3) {
				
				Dialog_insert d_insert = new Dialog_insert();
				FragmentTransaction ft = getFragmentManager().beginTransaction();

				if(imgs[position]==R.drawable.plus){//insert
					
					d_insert.show(ft, "asdfasdf");
				
				}
			}
		});

		
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		if(iv != null)	
		{
			((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(iv);
			iv = null;
		}
	}
}

 

우선 Dialog_insert 클레스는 DialogFragment를 상속받고 기본적인 다이얼로그를 띄워주는코드를 추가했습니다

Dialog_insert d_insert = new Dialog_insert();
FragmentTransaction ft = getFragmentManager().beginTransaction();
d_insert.show(ft,"testtest");

위 방법으로하면 service 영역에서 다이얼로그 플래그먼트를 받아오지(?)를 못합니다 - 컴파일에러

임의로 만든 Activity영역에서 테스트하면 정상작동합니다 

 

두번째로 생각한 방법은

Intent intObj = new Intent(TopService.this,Dialog_insert_act.class);

startActivity(intObj);

DialogFragment 받을 수 있는 Activity를 하나만들어 Service영역에서 Activity를 실행시키는 방법입니다. - 실행에러

이 방법은 실행에러가 뜹니다 

아래 소스는 Dialog_insert_act.java 입니다

@Override
protected void onCreate(Bundle savedInstanceState) {
	
        super.onCreate(savedInstanceState);
	Dialog_insert d_insert = new Dialog_insert();
	FragmentTransaction ft = getFragmentManager().beginTransaction();
		d_insert.show(ft, "11234");
		
		finish();
	}

 

아래소스는 Diolog_insert.java 입니다

public class Dialog_insert extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());      builder.setMessage("insert dialog page")
	   .setPositiveButton("ok", new DialogInterface.OnClickListener() {
				
		@Override
		public void onClick(DialogInterface dialog, int which) {
	//empty
			}
		})
		.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
				
		@Override
		public void onClick(DialogInterface dialog, int which) {
					// empty
					
				}
			});
		return  builder.create();
	}

}

 

1번방법은 거의 포기상태고 2번방법의 문제점을 찝어주세요

alalssk (180 포인트) 님이 2013년 10월 2일 질문
alalssk님이 2013년 10월 2일 수정
액티비티로 띄워주는방법  스타트액티비티 전라인에mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 추가해서  해결했습니다. 다른 서비스에서 대화상자 띄우는 좋은 방법 아시는분 조언좀 해주세요

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...