使用回调时如何发送一个int?

How to send an int when using callback?

好的,所以...我需要知道我按下了哪个按钮,以便我可以调整另一个片段中的一些值。

MainActivity = 这里是定义的回调
级别 = 你可以在哪里 select 级别,如果你 select 级别 1、2 或 3 speelveldfragment 需要知道
Speelveldfragment = 你实际玩的地方

所有代码都工作正常,我只需要知道如何根据级别更改 speelveldfragment 中的某些值 selected

主要片段:

    @Override
public void goToPage(String pageName) {
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
    fragmentTransaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left);
    switch(pageName){
        case "play":
            SpeelveldFragment speelveldFragment = new SpeelveldFragment();
            fragmentTransaction.replace(R.id.frameApp, speelveldFragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
            break;
        case "hoofdmenu":
            MenuFragment menuFragment = new MenuFragment();
            //fragmentTransaction.setCustomAnimations(R.anim.exit_to_right, R.anim.enter_from_left);
            fragmentTransaction.replace(R.id.frameApp, menuFragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
            break;
        case "levels":
            Levels levels = new Levels();
            fragmentTransaction.replace(R.id.frameApp, levels);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
            break;

    }
}

FragmentManager fragmentManager = getFragmentManager();
MenuFragment menuFragment = new MenuFragment();

级别:

    @Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_levels, container, false);

    btnOne = (Button)v.findViewById(R.id.btnOne);
    btnTwo = (Button)v.findViewById(R.id.btnTwo);
    btnThree = (Button)v.findViewById(R.id.btnThree);

    btnOne.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View v) {
            mCallback.goToPage("play");
        }
    });

    btnTwo.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View v) {
            mCallback.goToPage("play");
        }
    });

    btnThree.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View v) {
            mCallback.goToPage("play");
        }
    });

    return v;
}

Speelveld片段:

//Code which has nothing to do with the problem

编辑1

接口:

public interface GoToPageInterface {
void goToPage(String pageName);
void onButtonClicked(String buttonType, int levelNum);
}

差不多就这些了,我尝试了其他一些东西 类,但没有任何效果。

只需将另一个值发送到您的回调。因此,例如,对于 btnOne 你会这样做:

btnOne.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {

         //Here you send in an integer with your callback defining the level#
         mCallback.goToPage("play", 1);
     }
});

您的 OnClickListeners 设置为仅在按下特定按钮时触发,因此您已经确切知道用​​户单击了哪个按钮。因此,只需向您的回调发送一些其他数据,告诉它触发了哪个 OnClickListener。


根据评论进行编辑

您必须将回调重新定义为如下所示:

public interface YourMainFragmentCallback {
    void onButtonClicked(String buttonType, int levelNum);
}

然后您可以将 levelNum int 存储为 Fragment class 变量并将其用于 select 您的关卡。所以你的回调实现可能看起来像这样:

public void onButtonClicked(String buttonType, int levelNum) {
    if(buttonType.equals("play")) {
        levelSelection = levelNum; //levelSelection is a class member variable
    }
}

然后您只需使用您的 levelSelection 变量来启动任何需要启动的 Fragment 以达到该级别。