我在从另一个片段中的片段启动方法时遇到问题。
我有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
我的问题是如何?
答案 0 :(得分:0)
在onItemClick(...)
回调中尝试此操作:
if (settingsFragment != null && settingsFragment instanceof SettingsFragment) {
((SettingsFragment) settingsFragment).configureSettingsMenus(position);
}
你必须Type Cast这个类,因为在FragmentA
中你持有对DialogFragment
的引用,SettingsFragment
是configureSettingsMenus(...)
类的抽象而不包含方法DialogFragment
。
您必须将SettingsFragment
实例投射到具体的configureSettingsMenus(...)
才能访问方法SettingsFragment
。
- 或者 -
在FragmentA
中保留对具体DialogFragment settingsFragment = SettingsFragment.newInstance(1);
课程的引用。
取代:
SettingsFragment settingsFragment = SettingsFragment.newInstance(1);
使用:
onItemClick(...)
然后在settingsFragment.configureSettingsMenus(position);
回调中你可以直接调用方法而不使用Type Casting:
agg