제가 서비스영역에서 다이얼로그를 띄울라고하는데 잘안됩니다.
우선 서비스영역의 코드입니다 너무길어서 잡다한부분은 생략했습니다
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번방법의 문제점을 찝어주세요