1번째 방법 FragmentTransction을 commit 할때 setBreadCrumbTitle등의 함수를 이용하여
Transection에 추가 정보를 넣는다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnFisrt = (Button) findViewById(R.id.btnFirst);
Button btnSecond = (Button) findViewById(R.id.btnSecond);
Button btnThree = (Button) findViewById(R.id.btnThree);
mTextView = (TextView) findViewById(R.id.textView1);
btnFisrt.setOnClickListener(this);
btnSecond.setOnClickListener(this);
btnThree.setOnClickListener(this);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.frameLayout, mFirstFragment, FRAGMENT_FIRST);
ft.setBreadCrumbTitle(R.id.btnFirst);
ft.commit();
mTextView.setText("btnFirst");
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnFirst) {
Log.d(CLASSNAME, "onClick R.id.btnFirst");
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.frameLayout, mFirstFragment, FRAGMENT_FIRST);
ft.setBreadCrumbTitle(R.id.btnFirst);
ft.addToBackStack(null);
ft.commit();
mTextView.setText("btnFirst");
} else if (v.getId() == R.id.btnSecond) {
Log.d(CLASSNAME, "onClick R.id.btnSecond");
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.frameLayout, mSecondFragment, FRAGMENT_SECOND);
ft.setBreadCrumbTitle(R.id.btnSecond);
ft.addToBackStack(null);
ft.commit();
mTextView.setText("btnSecond");
} else if (v.getId() == R.id.btnThree) {
Log.d(CLASSNAME, "onClick R.id.btnThree");
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.frameLayout, mThreeFragment, FRAGMENT_THREE);
ft.setBreadCrumbTitle(R.id.btnThree);
ft.addToBackStack(null);
ft.commit();
mTextView.setText("btnThree");
}
}
OnBackStackChangedListener mOnBackStackChangedListener = new OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
LOG.i(CLASSNAME, "onBackStackChanged");
LOG.d(CLASSNAME,"onBackStackChanged getFragmentManager().getBackStackEntryCount() : "+ getFragmentManager().getBackStackEntryCount());
int i = getFragmentManager().getBackStackEntryCount();
if (i > 0) {
BackStackEntry tt = getFragmentManager().getBackStackEntryAt(i - 1);
int checkedId = tt.getBreadCrumbTitleRes();
LOG.i(CLASSNAME, "onBackStackChanged checkedId : " + checkedId);
switch (checkedId) {
case R.id.btnFirst:
mTextView.setText("btnFirst");
break;
case R.id.btnSecond:
mTextView.setText("btnSecond");
break;
case R.id.btnThree:
mTextView.setText("btnThree");
break;
}
} else {
//최초 add 한 것은 BasckStack을 가지지 않으므로 카운트가 0이다.
//그러므로 처음 무조건 add한 FirstFragment로 가정하고 아래와 같이 세팅해준다.
mTextView.setText("btnFirst");
}
}
};
@Override
protected void onResume() {
super.onResume();
getFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
}
@Override
protected void onPause() {
super.onPause();
getFragmentManager().removeOnBackStackChangedListener(mOnBackStackChangedListener);
}
스크린 샷.
TextView를 버튼 옆에 두어 현재 보여지고 있는 Fragment가 무엇인지 표시한다.
OnBackStackChangedListener는 BackStack에 변경되었을 경우 호출되는 이벤트로
버튼을 클릭하여 BackStack이 추가되었거나 Back Key를 눌러 BackStack이 제거 되었을 경우 호출된다.
해당 Linstener를 구현하여 TextView에 Transection에 대한 정보를
기반으로 현재 화면에 보여지고 있는 Fragment를 유추하여 표시하였다.
아래는 위 내용에 대한 예제 소스 이다.
FragmentBackStack_check_fragment_info.zip
전면에 나와있는 Fragment를 알아오는 방법은 알아내지 못했다.
'PROGRAMING > Android' 카테고리의 다른 글
Android log 저장방법 UncaughtExceptionHandler 구현과 android.app.application (0) | 2013.03.06 |
---|---|
Fragment 에서 BackStack 사용안하기. (0) | 2013.03.04 |
Fragment와 BackStack 이슈 (show,hide 버그로 보여짐) replace 사용. (0) | 2013.03.03 |
interface를 이용하여 DialogFragment이벤트의 구현부를 다른 장소에 구현한다. (0) | 2013.03.03 |
DialogFragment(AlertDialog) 안에 ListView 넣기 및 이벤트 받기 확인 (1) | 2013.03.03 |