뒤로 버튼과 같은 버튼을 사용하여 현재 조각을 닫는 방법은 무엇입니까?
Imagebutton을 사용하여 현재 조각을 닫으려고합니다.
저는 Fragment-A에 있으며 버튼을 클릭하면 Fragment-B로 바뀝니다.
그리고 Fragment-B 버튼을 클릭하면 Fragment-C로 바뀌고 Fragment-B가 닫힙니다.
Fragment-C에서 뒤로 버튼을 클릭하면 Fragment-A로 돌아갑니다.
내가 시도한 코드는 다음과 같습니다.
camera_album = (ImageButton) view.findViewById(R.id.camera_album);
camera_album.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
closefragment();
Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ;
MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ;
}
});
private void closefragment() {
getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}
fragment-B에서 뒤로 버튼을 클릭하면 Fragment-C로 바뀝니다.
그러나 Fragment-C에서 뒤로 버튼을 클릭하면 Fragment-A로 돌아 가지 않습니다. 빈 배경으로 돌아갑니다. Fragment-A로 돌아가려면 뒤로 버튼을 다시 한 번 클릭해야합니다.
그래서 현재 조각이 완성되지 않은 것 같습니다.
Android의 뒤로 버튼과 같은 현재 조각을 완료하는 방법은 무엇입니까?
Fragment A에서 B로 이동하려면 A를 B로 바꾸고 addToBackstack()
before를 사용하십시오 commit()
.
이제 Fragment B에서 C로 이동하려면 먼저 popBackStackImmediate()
A를 사용합니다. 이제 첫 번째 트랜잭션과 마찬가지로 A를 C로 바꿉니다.
나는 코드를 getActivity().getFragmentManager().beginTransaction().remove(this).commit();
...에
getActivity().getFragmentManager().popBackStack();
그리고 조각을 닫을 수 있습니다.
간단한 방법을 찾아야하는 사람들을 위해
시험 getActivity().onBackPressed();
이 시도:
ft.addToBackStack(null); // ft is FragmentTransaction
따라서 back-key 를 누르면 현재 활동 (여러 조각을 보유하고 있음)이 자체적으로 끝나지 않고 이전 조각을로드합니다.
getActivity().onBackPressed
필요한 모든 것을 수행합니다. 부모 활동에서 onBackPressed 메서드를 자동으로 호출합니다 .
이 시도:
public void removeFragment(Fragment fragment){
android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
}
이 논리는 저에게 효과적이기 때문에 시도해 볼 수 있습니다.
frag_profile profile_fragment = new frag_profile();
boolean flag = false;
@SuppressLint("ResourceType")
public void profile_Frag(){
if (flag == false) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
manager.getBackStackEntryCount();
transaction.setCustomAnimations(R.anim.transition_anim0, R.anim.transition_anim1);
transaction.replace(R.id.parentPanel, profile_fragment, "FirstFragment");
transaction.commit();
flag = true;
}
}
@Override
public void onBackPressed() {
if (flag == true) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
manager.getBackStackEntryCount();
transaction.remove(profile_fragment);
transaction.commit();
flag = false;
}
else super.onBackPressed();
}
Button ok= view.findViewById(R.id.btSettingOK);
Fragment me=this;
ok.setOnClickListener( new View.OnClickListener(){
public void onClick(View v){
getActivity().getFragmentManager().beginTransaction().remove(me).commit();
}
});
이것은 Kotlin 방식으로 조각 레이아웃에 버튼을 만든 다음 onViewCreated에서 onClickListner를 설정했습니다.
according to @Viswanath-Lekshmanan comment
override fun onViewCreated(view: View?, savedInstanceState: Bundle?)
{
super.onViewCreated(view, savedInstanceState)
btn_FragSP_back.setOnClickListener {
activity?.onBackPressed()
}
}
If you need to handle the action more specifically with the back button you can use the following method:
view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if( keyCode == KeyEvent.KEYCODE_BACK )
{
onCloseFragment();
return true;
} else {
return false;
}
}
});
Try this one
getActivity().finish();
'code' 카테고리의 다른 글
Get-ChildItem 재귀 수준 제한 (0) | 2020.10.26 |
---|---|
드롭 다운 방법 (0) | 2020.10.26 |
셔플 된 연속 정수 배열에서 중복 요소를 찾는 방법은 무엇입니까? (0) | 2020.10.25 |
CSS 기능 / 기능 감지를 사용하여 IE11 감지 (0) | 2020.10.25 |
VSCode가 HTML을 자동 완성하지 않음 (0) | 2020.10.25 |