如何从片段A中的片段B启动方法,并显示了Specyfic显示的方法



我从另一个片段中的片段启动方法有问题。

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

fragmentB是对话fragment。

这是我要调用的主要方法

 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

调用方法

我的问题是如何?

onItemClick(...)回调中尝试一下:

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

您必须输入铸造课程,因为在FragmentA中,您持有对DialogFragment的引用,这是SettingsFragment类的抽象,不包含方法configureSettingsMenus(...)

您必须将DialogFragment实例施加到混凝土SettingsFragment,才能访问方法configureSettingsMenus(...)

- 或者 -

保留对FragmentA中混凝土SettingsFragment类的引用。

替换:

DialogFragment settingsFragment = SettingsFragment.newInstance(1);

with:

SettingsFragment settingsFragment = SettingsFragment.newInstance(1);

然后在onItemClick(...)回调内,您可以直接直接调用该方法而无需类型铸造:

settingsFragment.configureSettingsMenus(position);

最新更新