일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 사용법
- 리사이클러뷰 체크박스
- retrofi
- #ContentProvider #App DataShare
- zeplin
- 빗버킷 #bitbucket #authorization failed #깃
- 메모리릭
- #안드로이드
- #SMS API #안드로이드 SMS #SMS Retriever
- 구글맵안돼요
- retrofit
- 안드로이드 메모리릭
- 안드로이드
- 키스토어
- #android #안드로이드 #glide #gif #이미지다운로드
- 안드로이드 익명클래스
- #리사이클러뷰
- 제플린
- MVVM
- #리사이클러뷰 어댑터
- 안드로이드 아키텍쳐
- 클린아키텍쳐
- 안드로이드해상도
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
- 레트로핏
- retrofit2
Archives
- Today
- Total
땀이 삐질삐질 나는 개발 일기
BaseActivity로 액티비티, 프래그먼트 전환 메서드 재사용 하기 본문
안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다.
오늘은 흔히 액티비티와 프래그먼트를 전환하는데 있어
아주 간단하고 유용한 팁을 소개하고자 합니다.
- 액티비티 스타트 메서드
- 프래그먼트 교체 메서드
코드는 아래와 같습니다.
BaseActivity.kt
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
fun replaseFragment(fragment: Fragment, tag: String) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, fragment, tag)
.addToBackStack(null)
.commit()
}
/* 자바에서 와일드카드로 쓰이는 <?>는 코틀린에선 <*>로 쓰인다 */
fun startNextActivity(className: Class<*>) {
var intent = Intent(this, className);
startActivity(intent)
}
}
BaseActivity.java
public class BaseTestActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void replaseFragment(Fragment fragment, String tag){
getSupportFragmentManager().beginTransaction()
.replace(R.id.container,fragment,tag)
.addToBackStack(null)
.commit();
}
public void startNextActivity(Class<?> className) {
Intent intent = new Intent(this, className);
startActivity(intent);
}
}
어때요. 굉장히 간단하죠?
이렇게 BaseActivity 처럼 메서드를 선언 해 두었다면 아래와 같은 형태로 원하는 위치에서 사용이 가능해집니다.
MainActivity.kt
class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/* 액티비티를 스타트 시키고 싶은 경우 */
startNextActivity(TestActivity::class.java) //다음 액티비티를 제네릭으로 전달한다 .
/* 프래그먼트를 바꾸고싶은 경우 */
replaseFragment(HomeFragment.newInstance(),"HomeFragment")
}
}
MainActivity.java
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startNextActivity(TestActivity.class);
replaseFragment(HomeFragment.newInstance(),"HomeFragment");
}
}
또한 이렇듯 Child 관계에 있는 프래그먼트에서도 손쉽게 activity Instance 캐스팅을 통해 얼마든지 재사용이 가능합니다.
HomeFragment.kt
class HomeFragment : Fragment() {
companion object {
fun newInstance(): HomeFragment {
return HomeFragment()
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return super.onCreateView(inflater, container, savedInstanceState)
(activity as MainActivity).replaseFragment(HomeFragment.newInstance(),"Homefragment")
(activity as MainActivity).startNextActivity(MainActivity::class.java)
}
}
HomFragment.java
public class HomeFragment extends Fragment {
public static HomeFragment newInstance(){
HomeFragment homeFragment = new HomeFragment();
return homeFragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
((MainActivity)getActivity()).replaseFragment(HomeFragment.newInstance(),"Homefragment");
((MainActivity)getActivity()).startNextActivity(MainActivity.class);
}
}
안드로이드 초보 개발자를 위해 아래와 같은 카카오 오픈톡을 운영 중입니다.
https://open.kakao.com/o/gn4xqQ6
'개발 Tip' 카테고리의 다른 글
Android,Java의 this는 언제, 어떻게 쓰일까? (0) | 2019.05.21 |
---|---|
[레트로핏]Retrofit2 @Field 와 @Body 차이 Feat.DTO (0) | 2019.05.17 |
다른 앱과 Data Share하는 방법 Feat. ContentProvider (0) | 2019.05.17 |
여러개의 EditText의 String 값을 깔끔하게 Null & Empty 검사하는 방법 (0) | 2019.05.16 |
안드로이드 RecyclerView Item Delete (0) | 2019.04.21 |
Comments