簡體   English   中英

當替換為第二個片段時,第一個片段上的按鈕移出屏幕

[英]Button on first fragment moves out of screen when replaced with second fragment

我正在嘗試在Activity上使用多個Fragment 我正在做的是:1.將第一個Fragment添加到Activity 第一個Fragment在屏幕底部包含一個按鈕。 2.通過將其添加到后堆棧,用第二個Fragment替換它。

當我單擊第一個Fragment底部的按鈕時,它會自動向上滑動(我不知道為什么)並移動到第二個Fragment

img1

當我通過按“后退”按鈕返回到第一個Fragment ,第一個Fragment的按鈕不Fragment

img2

主要活動

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上的按鈕仍然不Fragment 該問題僅存在於第一個Fragment的視圖中。 請幫忙。

我有類似的問題。 我正在使用appcompact主題,當我替換片段時,我的底部布局不在屏幕上。 然后我嘗試了不同的主題,之后效果很好。 因此,如果您還使用App Compact主題,請嘗試其他主題。 希望它能解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM