这是我的第一篇文章。希望有人能帮忙!
正如标题中所述,我在子片段中有按钮,这些子片段在viewPager中,而后者又在活动的父片段中。
在ChildFragmentA中-可以执行onast方法中的烤面包并显示它,并且按钮波纹效果有效,但是onClickListener似乎不起作用。
在ChildFragmentB中-代码似乎根本不在onCreate方法中执行。
我没有包含XML文件,因为这里已经有太多的代码。
我想知道是否需要使用FrameLayouts来包含片段,但是“子片段”位于viewPager的单独页面中,所以我看不到该怎么做。无论如何,其他父片段中的按钮都可以正常工作,而这些不在FrameLayout中。
所以我想知道我是否还缺少其他东西。任何帮助表示赞赏!
ChildFragmentA.java
const foundKey = this.state.keys.find(key => event.keyCode === key.keyCode);
if(!!foundKey) {
const keyDiv = document.getElementById(event.keyCode);
keyDiv.play();
}
ChildFragmentB.java
public class ChildFragmentA extends Fragment {
ImageButton myButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.child_fragment_A, container, false);
//this toast works:
Toast loadTest = Toast.makeText(getActivity(), "Loaded!", Toast.LENGTH_LONG);
loadTest.setGravity(Gravity.CENTER, 0, 0);
loadTest.show();
myButton = view.findViewById(R.id.myButton);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//This button does not work:
Toast testBtn = Toast.makeText(getActivity(), "Button Works!", Toast.LENGTH_LONG);
testBtn.setGravity(Gravity.CENTER, 0, 0);
testBtn.show();
}
});
return view;
}
PlaceholderFragment.java
public class ChildFragmentB extends Fragment {
SearchView mSearchView;
public static ChildFragmentB newInstance() {
return new ChildFragmentB();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this code does not execute:
Toast test = Toast.makeText(getActivity(), "onCreate!", 5000);
test.setGravity(Gravity.CENTER, 0, 0);
test.show();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.child_fragment_B, container, false);
mSearchView = root.findViewById(R.id.mSearchView);
//this code is not executed:
Toast test = Toast.makeText(getActivity(), "onCreateView!", 5000);
test.setGravity(Gravity.CENTER, 0, 0);
test.show();
return root;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//none of this code is executed
Toast test = Toast.makeText(getActivity(), "onActivityCreated!", 5000);
test.setGravity(Gravity.CENTER, 0, 0);
test.show();
mSearchView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSearchView.onActionViewExpanded();
}
});
}
ParentFragment.java
public class PlaceholderFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private PageViewModel pageViewModel;
public static PlaceholderFragment newInstance(int index) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle bundle = new Bundle();
bundle.putInt(ARG_SECTION_NUMBER, index);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageViewModel = ViewModelProviders.of(this).get(PageViewModel.class);
int index = 1;
if (getArguments() != null) {
index = getArguments().getInt(ARG_SECTION_NUMBER);
}
pageViewModel.setIndex(index);
}
@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = null;
switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
//load child fragment A
root = inflater.inflate(R.layout.child_fragment_A, container, false);
break;
case 2:
//load child fragment B
root = inflater.inflate(R.layout.child_fragment_B, container, false);
break;
}
pageViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
}
});
return root;
}
MainActivity.java
public class ParentFragment extends Fragment {
ViewPager viewPager;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_parent, container, false);
viewPager = root.findViewById(R.id.view_pager);
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
viewPager.setAdapter(sectionsPagerAdapter);
sectionsPagerAdapter.addFragment(new ChildFragmentA());
sectionsPagerAdapter.addFragment(new ChildFragmentB());
return root;
}