0

Я пытаюсь использовать несколько Fragment s на Activity. Что я делаю: 1. Добавьте первый Fragment в Activity. Первый Fragment содержит кнопку в нижней части экрана. 2. Замените его вторым Fragment, добавив его в заднюю часть.Кнопка на первом фрагменте выходит из экрана при замене вторым фрагментом

При нажатии на кнопку на нижней части первой Fragment, он автоматически скользит вверх (не знаю почему) и переходит на второй Fragment:

img1

Когда я возвращаюсь первый Fragment, нажав на кнопку назад, кнопка в первом Fragment выходит из поля зрения:

img2

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. Пожалуйста помоги.

ответ

0

У меня был несколько аналогичный вопрос. Я использовал тему appcompact, и моя нижняя компоновка выходила из экрана, когда я заменяю фрагмент. Затем я попробовал другую тему, после чего работал отлично. Поэтому, если вы также используете приложение компактной темы, попробуйте любую другую тему. Надеюсь, он решит вашу проблему.