구글링과 주관적인 생각이 들어있어 틀린 답들이 있습니다 정중히 댓글, 수정 부탁드립니다 약 10개식 정리할 예정입니다. 1. 안드로이드 애플리케이션 클래스는 무엇인가요? > 안드로이드의 Application Class 는 액티비티 및 서비스와 같은 다른 모든 구성 요소(액티비티(Activity), 서비스(Service), 방송수신자(Broadcast receiver), 콘텐츠 제공자(Content provider), 인텐트(Intent))에 접근 가능한 기본 클래스입니다. 또한 애플리케이션 프로세스가 생성될 때, 가장 먼저 초기화 됩니다. 그렇기 때문에, 보통 앱 전역에서 일관성있게, 사용하는 요소들을 등록하여 사용하곤 합니다. 2. 컨텍스트란 무엇인가요? Context > Context 는 리소스에 접..
모든 예제 코드는 구글 청사진을 기본으로 구현되었습니다. 모든 프로젝트가 저장되어 있는 저장소입니다 (MVC, MVP, MVVM) Nanamare/android_architecture Simple Android architecture app. Contribute to Nanamare/android_architecture development by creating an account on GitHub. github.com 모든 예제 코드에서 API 비동기 처리 및 Observer 패턴 구현에 RxJava가 사용되었습니다. MVC 적용(RxJava 사용) MVP 적용(RxJava 사용) MVVM 적용(ObservableField + Databinding + RxJava 사용) MVVM 적용(LiveData ..
몇일전에 CustomView에서 viewModel 을 주입하며 삽질한 경험입니다. 보통 커스텀 뷰를 만들면 이런 모습이 많이 나오게 됩니다. class CustomView : BaseCustomView { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) } 근데 만들고 나면 CustomViewModel 을 주입 시켜줘야 하는데 액티비티가 아니기..
Recycler view 동작 원리 Recycler view 의 아답터에 데이터가 300개 있고 화면에 10개의 데이터가 보여진다면, 10개의 데이터 공간을 생성하고, 그 10개의 공간을 재활용해서 300개의 데이터를 보여준다 호출 순서 getItemCount 함수를 이용하여 Item 의 총 갯수가 몇개 인지 판단하고, getItemViewType 이 불리면서, 현재 뷰의 Position에 해당하는 ViewType을 판단한다. 이후 onCreateViewHolder에서, ViewType 에 해당하는 ViewHolder를 생성한다. onBindViewHolder 에서는 onCreateViewHolder 에서 생성된 ViewHolder 를 가져와서 현재 포지션에 맞는 데이터를 뷰홀더안에 뷰들에게 바인딩해준다..
중첩 프래그먼트의 특징은 XML로 추가할 수가 없고, 항상 동적으로 추가해야한다. 그렇기 때문에 부모 프래그먼트는 자식 프레그먼트를 관리하고 자식프래그먼트가 UI를 담당하는 구조로 자주 설계된다. 액티비티에서 프래그먼트를 다룰 때는 getSupportFragmentManager()를 사용하였지만 중첩 프래그먼트를 다룰 때는, getChildFragmentManager()를 사용한다. public class TestFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInsta..
보통 캔버스에 그리는 것이 아닌 뷰그룹을 상속받아 내부에 뷰를 사용할때는 생성자에서 xml을 인플레이트 시키고, 이후 인플레이트 된 뷰들을 찾아 사용할때, 시점을 onCreate()에서 초기화 하여 사용했었는데, 더 정확한 시점이 있었다. public CircleProgressView(Context context) { super(context); initView(); //inflate } @Overrideprotected void onFinishInflate() { super.onFinishInflate(); mIvStar = findViewById(R.id.star); mIvRect = findViewById(R.id.rect); mIvCircle = findViewById(R.id.circle);} ..
커스텀 뷰를 만들때 상속받아 뷰와 커스텀 뷰를 포함하는 뷰 그룹과 불필요한 중첩을 피하기 위해 merge 태그를 사용한다. 가령 예를 들어 이런 식으로 사용하면 된다. merge 대신 LinearLayout을 사용할 수 있지만, 저 xml을 사용하는 커스텀 뷰가 LinearLayout을 상속받아 만든 것이라면 LinearLayout 안에 또 LinearLayout이 존재하는데 이 경우 중복 되기 때문에 merge를 사용하면 중첩을 피할수 있다.