使用回调时如何发送一个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 以达到该级别。
好的,所以...我需要知道我按下了哪个按钮,以便我可以调整另一个片段中的一些值。
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 以达到该级别。