后退按钮按下片段中的视图

时间:2018-01-11 15:48:44

标签: java android android-fragments

我有一个MainActivity,其中包含2个片段A和B.片段A打开片段B.

片段B中有4个(a,b,c,d)视图,每个视图加载相应的xml。当我在我的3个观点中时a,b,c 并按回按钮,我去片段A这很好。但是,当我在观察的时候' d'并按回按钮,我必须去查看' c' 而不是片段A.我如何实现这种情况?

我的MainActivity有onBackPressed()方法,看起来像这样 -

for (Fragment frag : fm.getFragments()) {

            if (frag != null && frag.isVisible()) {

                FragmentManager childFm = frag.getChildFragmentManager();

                if (childFm.getBackStackEntryCount() > 0) {

                    childFm.popBackStack();
                    return;
                    }
                }
        }

        if (fm.getBackStackEntryCount() > 1) {
            fm.popBackStack();
        } else {

            super.onBackPressed();

            finish();
        }

3 个答案:

答案 0 :(得分:1)

如果你需要实现这一目标,你必须回听片段中的新闻事件。

首先,为back press callback创建一个接口。

public interface BackPressListener {
    void onBackPressed();
}

其次,像这样配置您的活动。

public class MainActivity extends AppCompatActivity {

    private BackPressListener backPressListener;

    public void setBackPressListener(BackPressListener backPressListener) {
        this.backPressListener = backPressListener;
    }

    @Override
    public void onBackPressed() {
        if (backPressListener != null)
            backPressListener.onBackPressed();
        else super.onBackPressed();
    }
}

第三,听取片段中的背压事件。

public class MyFragment extends Fragment implements BackPressListener {

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if(context instanceof MainActivity)
            ((MainActivity) context).setBackPressListener(this);
    }

    @Override
    public void onBackPressed() {
        //handle your back press event here
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(getActivity() instanceof  MainActivity)
            ((MainActivity)getActivity()).setBackPressListener(null);
    }
}

答案 1 :(得分:0)

当您要进入View-D时,将布尔变量设为true,然后按下按钮,检查该布尔值是否为true,然后显示视图-C。

vector <- c("l","e","s","k","c","w","a","o","f","t","o","r","v")
index <- c(11,8,1,5,4,13,3,6,10,2,12,9,7)

答案 2 :(得分:0)

做错了这里,你可能会遇到类似的问题,你要求的是如果按回c 那么转到b

您应该考虑使用片段而不是LinearLayouts ,您可以使用getChildFragmentManager()在片段中添加子片段。添加子片段时,您也可以提到addToBackStack。然后Android系统将自行处理。

e.g。

    getChildFragmentManager().beginTransaction()
            .replace(R.id.fragment_container, fragment, tag)
            .addToBackStack(tag)
            .commit()