如何从片段a中的片段b开始方法,具有specyfic show

时间:2017-02-22 16:21:36

标签: android dialogfragment

我在从另一个片段中的片段启动方法时遇到问题。

我有2个片段。在抽屉和抽屉中,我可以选择带有信息的dialogFragment。我只打开一个片段,但我想为所有选项创建一个片段。

因此fragmentB是DialogFragment。

这是我想要调用的主要方法

 public void configureSettingsMenus(int position) {
    switch (position) {
        case TRADING_HISTORY:

            break;
        case LEADER_BOARD:

            break;
        case SPECIAL_OFFER:

            break;
        case VIDEO_TUTORIALS:

            break;
        case FAQ:

            break;
        case CONTACT:

            break;
        default:
            Toast.makeText(getContext(), "Something went wrong, try again...", Toast.LENGTH_SHORT).show();
            break;
    }

这就是那个班级

    public class SettingsFragment extends DialogFragment {


    private static final int TRADING_HISTORY = 1;
    private static final int LEADER_BOARD = 2;
    private static final int SPECIAL_OFFER = 3;
    private static final int VIDEO_TUTORIALS = 4;
    private static final int FAQ = 5;
    private static final int CONTACT = 6;


    String[] data = {"HERE", "WILL", "BE", "GAME", "HISTORY"};

    public SettingsFragment() {
    }

    public static SettingsFragment newInstance(int num) {
        SettingsFragment f = new SettingsFragment();
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_game_history, container, false);
        RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.history_games_recycler);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(layoutManager);
        RecyclerView.Adapter adapter = new WinLostHistoryAdapter(data);
        recyclerView.setAdapter(adapter);
        return view;
    }

    public void configureSettingsMenus(int position) {
        switch (position) {
            case TRADING_HISTORY:

                break;
            case LEADER_BOARD:

                break;
            case SPECIAL_OFFER:

                break;
            case VIDEO_TUTORIALS:

                break;
            case FAQ:

                break;
            case CONTACT:

                break;
            default:
                Toast.makeText(getContext(), "Something went wrong, try again...", Toast.LENGTH_SHORT).show();
                break;
        }


    }

}

在FragmentA中我创建了这个:

DialogFragment settingsFragment = SettingsFragment.newInstance(1);

 private void configureDrawer(){
    result = new DrawerBuilder()
            .withSliderBackgroundColor(Color.GRAY)
            .withActivity(getActivity())
            .withDisplayBelowStatusBar(false)
            .withDrawerGravity(Gravity.LEFT)
            .withHeaderPadding(true)
            .addDrawerItems(
                    new SectionDrawerItem().withName("Options"),
                    new PrimaryDrawerItem().withName("Trading History").withIcon(R.drawable.trading_history).withIdentifier(1),
                    new PrimaryDrawerItem().withName("Leader Board").withIcon(R.drawable.leade_board).withIdentifier(2),
                    new PrimaryDrawerItem().withName("Special offer").withIcon(R.drawable.special_icon).withIdentifier(3),
                    new PrimaryDrawerItem().withName("Video tutorials").withIcon(R.drawable.video_tutorials).withIdentifier(4),
                    new PrimaryDrawerItem().withName("FAQ").withIcon(R.drawable.faq_icon).withIdentifier(5),
                    new PrimaryDrawerItem().withName("CONTACT").withIcon(R.drawable.contact_icon).withIdentifier(6)
            )
            .buildForFragment();

    result.setOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
        @Override
        public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
            FragmentTransaction ft = getChildFragmentManager().beginTransaction();
            ft.addToBackStack(null);
            if(position == 6)
            {
                result.closeDrawer();
                settingsFragment.show(ft, DIALOG_LOST);
            }

            return true;
        }
    });

并在s etOnDrawerItemClickListener中我想从fragmentB

调用方法

我的问题是如何?

1 个答案:

答案 0 :(得分:0)

onItemClick(...)回调中尝试此操作:

if (settingsFragment != null && settingsFragment instanceof SettingsFragment) {
    ((SettingsFragment) settingsFragment).configureSettingsMenus(position);
}

你必须Type Cast这个类,因为在FragmentA中你持有对DialogFragment的引用,SettingsFragmentconfigureSettingsMenus(...)类的抽象而不包含方法DialogFragment

您必须将SettingsFragment实例投射到具体的configureSettingsMenus(...)才能访问方法SettingsFragment

- 或者 -

FragmentA中保留对具体DialogFragment settingsFragment = SettingsFragment.newInstance(1); 课程的引用。

取代:

SettingsFragment settingsFragment = SettingsFragment.newInstance(1);

使用:

onItemClick(...)

然后在settingsFragment.configureSettingsMenus(position); 回调中你可以直接调用方法而不使用Type Casting:

agg