DialogFragment 클래스는 대화상자를 표현하며 액티비티 위에 대화상자를 표시한다.
프래그먼트 내부의 대화상자는 다음 2가지 방법으로 정의한다.
- onCreateView에서 대화상자의 레이아웃을 생성 또는 전개하여 루트 뷰를 리턴한다. 이 루트 뷰에 포함된 위젯이 대화상자에 나타난다.
커스텀 레이아웃을 자유롭게 배치할 수 있다.
- onCreateDialog에서 Dialog나 그 서브 클래스의 객체를 리턴한다. 통상 AlertDialog 객체를 생성하여 리턴하며 기존의 대화상자를 그대로 흉내 낼 수 있다.
프래그먼트에 포함된 대화상자는 대화상자 관련 메소드 대신 프래그먼트의 메소드로 관리한다.
int show(FragmentTransaction transaction, String tag)
void show(FragmentManager manager, String tag)
첫 번째 인수로 트랜잭션을 전달하면 프래그먼트를 트랜잭션에 추가하고 commit까지 자동으로 수행하며 대화상자가 즉시 나타난다.
두 번째 인수는 차후의 검색을 위한 태그이다.
DialogFragmentTest.java
package com.example.ch20_dialogfragment;
import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class DialogFragmentTest extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialogfragmenttest);
}
public void mOnClick(View v){
FragmentManager fm = getFragmentManager();
FragmentTransaction tr = fm.beginTransaction();
Fragment prev = fm.findFragmentByTag("dialog");
if(prev != null){
tr.remove(prev);
}
NameGenderFragment dialog = new NameGenderFragment();
dialog.show(tr, "dialog");
//dialog.show(fm, "dialog");
}
public static class NameGenderFragment extends DialogFragment{
//레이아웃을 전개해서 리턴
/*public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View root = inflater.inflate(R.layout.namegenderfragment, container, false);
return root;
}*/
//Dialog 객체 생성해서 리턴
public Dialog onCreateDialog(Bundle savedInstanceState){
Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.namegenderfragment);
return dialog;
}
}
}
dialogfragmentttest.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="대화상자 호출"
/>
</LinearLayout>
namegenderfragment.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이름"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="김아무개"
/>
</LinearLayout>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checkedButton="@+id/man"
>
<RadioButton
android:id="@id/man"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="남자"
/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="여자"
/>
</RadioGroup>
</LinearLayout>
실행화면
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 액션 모드(ActionMode) 다루기 (1) | 2015.10.25 |
---|---|
안드로이드 - 액션바 꾸미기 (0) | 2015.10.25 |
안드로이드 - DialogFragment에 스타일과 테마 지정하기 (0) | 2015.10.24 |
안드로이드 - 프래그먼트 대화상자를 액티비티 안에 배치하기 (0) | 2015.10.12 |
안드로이드 - 내비게이션 탭(Navigation Tab) (0) | 2015.10.04 |
[펌자료] 안드로이드 - 액티비티의 상태를 저장 및 복원하는 콜백 메소드 - onSaveInstanceState, onRestoreInstanceState (0) | 2015.10.04 |
안드로이드 - ShareActionProvider를 이용한 앱간 데이터 공유 처리하기 (0) | 2015.10.04 |
안드로이드 - 액션바의 활용 두번째 액션 프로바이더 (0) | 2015.09.28 |