안드로이드

안드로이드 Fragment에서 Dialog 띄우기 ==> DialogFragment

알통몬_ 2017. 3. 25. 17:23
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

이번 포스팅에서는 안드로이드 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>
다이얼로그는 원하는대로 구성하시면 되겠죠?
==============================================================


이상입니다.

커스텀 다이얼로그를 구현하는 방법과 크게 차이가 나지는 않죠??

이상입니다.

반응형