Java 如何在刷卡后访问下一个片段中的按钮?

Java 如何在刷卡后访问下一个片段中的按钮?,java,android,android-fragments,Java,Android,Android Fragments,正如你在这张照片中看到的,如果我点击标题1中的2按钮,就会出现FrameLayout中的Fragment。但是,如果我滑动到标题2,则两个按钮不起作用 代码如下: package com.flashcards; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android

正如你在这张照片中看到的,如果我点击标题1中的2按钮,就会出现
FrameLayout
中的
Fragment
。但是,如果我滑动到标题2,则两个按钮不起作用

代码如下:

package com.flashcards;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * A simple {@link Fragment} subclass.
 * Use the {@link BaseFlashCardsFragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class BaseFlashCardsFragment extends Fragment implements View.OnClickListener {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_POSITION = "position";

    // TODO: Rename and change types of parameters
    private int position;
    private String mParam2;

    public BaseFlashCardsFragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param position Parameter 1.
     * @return A new instance of fragment BaseFlashCardsFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static BaseFlashCardsFragment newInstance(int position) {
        BaseFlashCardsFragment fragment = new BaseFlashCardsFragment();
        Bundle args = new Bundle();
        args.putInt(ARG_POSITION, position);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            position = getArguments().getInt(ARG_POSITION, 0);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = null;
        int layoutId;
        switch (position) {
            case 0: layoutId = R.layout.limits_flashcardsfragment1; break;
            case 1: layoutId = R.layout.limits_flashcardsfragment2; break;
            default: layoutId = R.layout.limits_flashcardsfragment3; break;
        }

        rootView = inflater.inflate(layoutId, container, false);
        rootView.findViewById(R.id.buttonterm).setOnClickListener(this);
        rootView.findViewById(R.id.buttondefinition).setOnClickListener(this);
        switchPage(new limits_fragmentpageA());
        switchPage(new limits_fragmentpageB());

        return rootView;
    }

    @Override
    public void onClick(View view) {
        int viewId = view.getId();

        if (viewId == R.id.buttonterm)
            switchPage(new limits_fragmentpageA());
        else if (viewId == R.id.buttondefinition)
            switchPage(new limits_fragmentpageAA());
        else if (viewId == R.id.buttonterm)
            switchPage(new limits_fragmentpageB());
        else if (viewId == R.id.buttondefinition)
            switchPage(new limits_fragmentpageBB());

    }

    private void switchPage (Fragment fragment){
        android.support.v4.app.FragmentManager manager = getFragmentManager();
        manager.beginTransaction()
                .replace(R.id.activity_main_fragmentcontainer, fragment)
                .commit();
    }
}

您还可以获得清晰的视图。

正如我所见,您需要在活动中包含所有元素(按钮、viewpager、标题等),而不是在片段中,因为它在所有片段中共享,所以您不需要在每个片段中重新创建它们

要更改标题(和较低的提示),需要将
OnPageChangeListener
添加到viewpager适配器


要在术语/定义之间切换片段,您需要在这些按钮的
OnClickListener
中直接传递事件,如“
(BaseCardFragment)adapter.InstanceItem(viewpager、viewpager.getCurrentItem)、flipToTerm()或flipToDefinition()

我认为问题在于,如果你在片段中,你应该
getChildFragmentManager()
而不是
getFragmentManager()
也许你应该像这样重写
switchPage()

private void开关页(片段){
android.support.v4.app.FragmentManager=getChildFragmentManager();
经理:开始营业()
.替换(R.id.activity\u main\u fragmentcontainer,fragment)
.commit();
}

getChildFragmentManager();正在工作,但是它只能显示一个片段,而这行代码不工作“switchPage(new limits_fragmentpageB());”我希望它切换到一个新片段。