안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^ |
이번 포스팅에서는 안드로이드 Fragment에서 커스텀 Dialog 띄우는 방법에 대해 알아보겠습니다.
Activity에서 Dialog를 띄우는 것과는 사알짝 다르게
Fragment에서는 DialogFragment라는 것을 사용해야 커스텀 다이얼로그를 띄울 수 있습니다.
Fragment에서 그냥 Dialog 띄우듯이 띄우면? 이상하다는 걸 아실거에요 ㅎㅎ
이번 포스팅은 지난 포스팅에서 만들어 보았던 TabLayout + ViewPager 예제를 가지고 이어서
만들어볼건데요.
2017/03/25 - [안드로이드] - 안드로이드 TabLayout + ViewPager 탭 레이아웃 + 뷰페이저 만들기
이어서 필요한 Java파일과 xml입니다.
Fragment1.java, FragmentDialog.java
fragment1.xml, dialog.xml
1. Fragment1.java
===========================================================
package pager.view.tap.tablayouts;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class Fragment1 extends Fragment implements View.OnClickListener{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container, false);
Button open = (Button) view.findViewById(R.id.openDialogFragment);
// 원하느 코드 작성
open.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.openDialogFragment:
// 데이터를 다이얼로그로 보내는 코드
Bundle args = new Bundle();
args.putString("key", "value");
//---------------------------------------.//
FragmentDialog dialog = new FragmentDialog();
dialog.setArguments(args); // 데이터 전달
dialog.show(getActivity().getSupportFragmentManager(),"tag");
break;
}
}
}
===========================================================
2. fragment1.xml
===========================================================
<?xml version="1.0" encoding="utf-8"?>
<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">
<Button
android:id="@+id/openDialogFragment"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="다이얼로그\n열기"/>
</LinearLayout>
===========================================================
3. FragmentDialog.java
===========================================================
package pager.view.tap.tablayouts;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FragmentDialog extends DialogFragment {
private Fragment fragment;
public FragmentDialog() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog, container, false);
Bundle args = getArguments();
String value = args.getString("key");
/*
* DialogFragment를 종료시키려면? 물론 다이얼로그 바깥쪽을 터치하면 되지만
* 종료하기 버튼으로도 종료시킬 수 있어야겠죠?
*/
// 먼저 부모 프래그먼트를 받아옵니다.
//findFragmentByTag안의 문자열 값은 Fragment1.java에서 있던 문자열과 같아야합니다.
//dialog.show(getActivity().getSupportFragmentManager(),"tag");
fragment = getActivity().getSupportFragmentManager().findFragmentByTag("tag");
// 아래 코드는 버튼 이벤트 안에 넣어야겠죠?
if (fragment != null) {
DialogFragment dialogFragment = (DialogFragment) fragment;
dialogFragment.dismiss();
}
return view;
}
}
==============================================================
4. dialog.xml
==============================================================
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="400dp"
android:orientation="vertical"
android:gravity="center">
<TextView
android:text="DialogFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</layout>
다이얼로그는 원하는대로 구성하시면 되겠죠?
==============================================================
이상입니다.
커스텀 다이얼로그를 구현하는 방법과 크게 차이가 나지는 않죠??
이상입니다.