活动片段中的viewPager中的子片段中的按钮没有响应

时间:2020-06-09 19:42:31

标签: java android android-fragments android-viewpager

这是我的第一篇文章。希望有人能帮忙!

正如标题中所述,我在子片段中有按钮,这些子片段在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;
}

0 个答案:

没有答案
相关问题