-
[안드로이드] Fragment 프래그먼트Android/공부 2020. 6. 23. 19:21
프래그먼트는 Activity 내에 생성되는, UI 구성을 여러 개의 모듈 단위로 작성할 수 있도록 해주는 기능이다. 또한 한번 작성된 프래그먼트는 여러 액티비티에서 재사용이 가능하므로 UI 구성에 소요되는 작업량을 많은 부분 감소시킬 수 있다.
액티비티처럼 하나의 독립된 모듈처럼 실행되기 때문에 액티비티와 연관된 생명주기를 가지고 있으며, 액티비티 실행 중에도 화면에 동적으로 추가되거나 다른 프래그먼트로 교체가 가능하다. 프래그먼트에는 인텐트를 사용할 수 없다.1. xml
1. activity_main.xml
-
레이아웃에 두개의 프래그먼트(Fragment)를 추가해준다.
<fragment android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@+id/fragment_color_list" android:name="com.example.myfragmentex.ColorListFragment"/> <fragment android:id="@+id/fragment_color" android:name="com.example.myfragmentex.ColorFragment" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" />
-
각 프래그먼트는 ColorFragment와 ColorListFragment에 연결시켜준다.
-
프래그먼트는 자바 클래스로 생성
2. java
▼ ColorFragment와 ColorListFragment의 서브클래스를 사진과 같이 설정한다.
1. ColorListFragment.class
package com.example.myfragmentex; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.ListFragment; import java.util.Arrays; import java.util.List; public class ColorListFragment extends ListFragment { private onColorSelectedListener mListener; public interface onColorSelectedListener { void onColorSelectedListener(int color); } // 액티비티와 프래그먼트를 붙여주는 메소드 @Override public void onAttach(@NonNull Context context) { super.onAttach(context); try { mListener = (onColorSelectedListener) context; } catch (ClassCastException e) { throw new ClassCastException(((Activity) context).getLocalClassName()+ "는 OnColorSeletedListener를 구현해야 합니다."); } } @Override public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) { //프래그먼트에 있는 어뎁터를 가져온다. ArrayAdapter<String> adapter = (ArrayAdapter<String>) l.getAdapter(); String colorString = adapter.getItem(position); int color = Color.RED; switch (colorString) { case "Red": color = Color.RED; break; case "Blue": color = Color.BLUE; break; case "Green": color = Color.GREEN; break; } if (mListener != null) mListener.onColorSelectedListener(color); } // 리스트를 클릭했을때 발생하는 이벤트를 처리하는 메소드 @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); List<String> colorList = Arrays.asList("Red","Green","Blue"); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, colorList); setListAdapter(adapter); } }
-
ColorListFragment는 ListFragment를 상속받는다.
-
클래스에는 액티비티와 프래그먼트를 붙일 때 호출하는 함수인 onAttach()를 추가하고, 색상 리스트와 리스트를 클릭했을때 발생하는 이벤트를 처리할 메소드를 정의해준다.
2. ColorFragment.class
package com.example.myfragmentex; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; public class ColorFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return new View(getActivity()); } // 색상추가 public void setColor(int color) { getView().setBackgroundColor(color); } }
3. MainActivity.class
package com.example.myfragmentex; import androidx.appcompat.app.AppCompatActivity; import android.graphics.Color; import android.os.Bundle; public class MainActivity extends AppCompatActivity implements ColorListFragment.onColorSelectedListener { private ColorFragment mColorFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mColorFragment = (ColorFragment) getSupportFragmentManager() .findFragmentById(R.id.fragment_color); mColorFragment.setColor(Color.RED); } @Override public void onColorSelectedListener(int color) { mColorFragment.setColor(color); } }
3. 결과화면
'Android > 공부' 카테고리의 다른 글
[안드로이드] RecyclerView 리사이클러뷰 (0) 2020.06.29 [안드로이드] Fragment 프래그먼트 예제 (0) 2020.06.26 [안드로이드] 화면 회전시 데이터 유지하기 (0) 2020.06.23 [안드로이드] 데이터 저장하기 2 (0) 2020.06.22 [안드로이드] 데이터 저장하기 (0) 2020.06.22 -