Я пытаюсь использовать несколько Fragment
s на Activity
. Что я делаю: 1. Добавьте первый Fragment
в Activity
. Первый Fragment
содержит кнопку в нижней части экрана. 2. Замените его вторым Fragment
, добавив его в заднюю часть.Кнопка на первом фрагменте выходит из экрана при замене вторым фрагментом
При нажатии на кнопку на нижней части первой Fragment
, он автоматически скользит вверх (не знаю почему) и переходит на второй Fragment
:
Когда я возвращаюсь первый Fragment
, нажав на кнопку назад, кнопка в первом Fragment
выходит из поля зрения:
MainActivity
public class MainActivity extends AppCompatActivity implements UserDetailsFragment.UserDetailsFragmentListener,
PhotoFragment.PhotoFragmentListener, TestFragment.TestFragmentListener{
@Bind(R.id.container)
FrameLayout frameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_profile);
ButterKnife.bind(this);
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
initView();
}
private void initView() {
TestFragment testFragment = new TestFragment();
FragmentUtil.replaceFragment(this,R.id.container, testFragment);
}
@Override
public void onProfileDetailCompleted(UserModel userModel) {
PhotoFragment photoFragment = PhotoFragment.newInstance(userModel);
FragmentUtil.replaceFragment(this, R.id.container, photoFragment);
}
@Override
public void onPhotoUploaded(UserModel userModel) {
}
@Override
public void onSkipPhotoClicked() {
PhotoFragment photoFragment = PhotoFragment.newInstance(null);
FragmentUtil.replaceFragment(this, R.id.container, photoFragment);
}
@Override
public void onTest() {
PhotoFragment photoFragment = PhotoFragment.newInstance(null);
FragmentUtil.replaceFragment(this, R.id.container, photoFragment);
}
}
TestFragment.java
public class TestFragment extends BaseFragment {
public TestFragment() {
// Required empty public constructor
}
public interface TestFragmentListener {
void onTest();
}
private TestFragmentListener mListener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_test, container, false);
ButterKnife.bind(this, view);
return view;
}
@OnClick(R.id.next_btn)
public void onNextButtonClicked() {
//TODO validate view
if(mListener!=null)
mListener.onTest();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof TestFragmentListener) {
mListener = (TestFragmentListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement TestFragmentListener");
}
}
}
FragmentUtils.java
public class FragmentUtil {
public static boolean hadFragment(AppCompatActivity activity) {
return activity.getSupportFragmentManager().getBackStackEntryCount() != 0;
}
public static void replaceFragment(AppCompatActivity activity, int contentId, BaseFragment fragment) {
FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out);
if (hadFragment(activity)) {
transaction.replace(contentId, fragment, fragment.getClass().getSimpleName());
} else {
transaction.add(contentId, fragment, fragment.getClass().getSimpleName());
}
transaction.addToBackStack(null);
transaction.commit();
}
public static void removeFragment(AppCompatActivity activity, BaseFragment fragment) {
activity.getSupportFragmentManager().beginTransaction()
.remove(fragment)
.commit();
}
public static void showFragment(AppCompatActivity activity, BaseFragment fragment) {
activity.getSupportFragmentManager().beginTransaction()
.show(fragment)
.commit();
}
public static void hideFragment(AppCompatActivity activity, BaseFragment fragment) {
activity.getSupportFragmentManager().beginTransaction()
.hide(fragment)
.commit();
}
public static void attachFragment(AppCompatActivity activity, BaseFragment fragment) {
activity.getSupportFragmentManager().beginTransaction()
.attach(fragment)
.commit();
}
public static void detachFragment(AppCompatActivity activity, BaseFragment fragment) {
activity.getSupportFragmentManager().beginTransaction()
.detach(fragment)
.commit();
}
}
Если переместить из второго Fragment
к третьему Fragment
(который является таким же, как и первый), кнопки на нижней части второго экрана будет выглядеть отлично. Но кнопка на первом Fragment
по-прежнему выходит из вида. Проблема существует только в представлении первого Fragment
. Пожалуйста помоги.