배경:
- Fragment에 Google Maps를 올려 사용자에게 보여주고 있다.
- 사용자가 Dialog 창을 열어 검색을 할 수 있게 하고 싶다.
1. Dialog layout xml 생성
Dialog 창에는 하나의 EditText를 추가하여
사용자로 하여금 String을 입력받게 한다.
- Fragment에 Google Maps를 올려 사용자에게 보여주고 있다.
- 사용자가 Dialog 창을 열어 검색을 할 수 있게 하고 싶다.
1. Dialog layout xml 생성
Dialog 창에는 하나의 EditText를 추가하여
사용자로 하여금 String을 입력받게 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Location"
android:visibility="visible"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/city_name"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
| cs |
2. DialogFragment 생성
DialogFragment를 상속받는 Class를 하나 선언한다.
아래 코드에서는 Listener를 하나 만들었는데,
이는 DialogFragment를 호출한 부모 Fragment에 결과를 반환하기 위함이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
public class MyDialogFragment extends DialogFragment {
private MyDialogListener myListener;
public interface MyDialogListener {
public void myCallback(String cityName);
}
public MyDialogFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
myListener = (MyDialogListener) getTargetFragment();
} catch (ClassCastException e) {
throw new ClassCastException();
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.fragment_dialog, null))
.setPositiveButton(R.string.search, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText edCityName = (EditText)getDialog().findViewById(R.id.city_name);
String cityName = edCityName.getText().toString();
myListener. myCallback(cityName);
}
});
return builder.create();
}
}
| cs |
3. 부모 Fragment에서 FragmentDialog를 호출하도록 코드 추가한다.
사용자가 버튼을 누르거나, 이벤트가 발생했거나 등 Dialog를 호출하기 위해 아래와 같이 openDialog() 메서드가 불려지면, 위에서 선언했던 DialogFragment를 생성하여 화면에 그려준다.
또한 위에서 선언했던 MyDialogFragment.MyDialogListener interface를 구현하여
해당 Dialog의 결과를 반환받아 원하는 작업을 수행할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
|
private void openDialog() {
DialogFragment myDialogFragment = new MyDialogFragment();
myDialogFragment.setTargetFragment(this, 0);
myDialogFragment.show(getFragmentManager(), "Search Filter");
}
@Override
public void onClickSearchFilter(String cityName) {
/*
* Do Something
*/
}
| cs |
많은 도움이 되었습니다. 혹시 전체 코드를 참고할 수 있을까요??? 처음이라 많이 어려운 부분이 있어서 공부하고싶습니다....
답글삭제