如何从自身内部获取片段索引?

How to get fragment index from within itself?

我有 3 个片段是从同一个 class 文件生成的。这三个片段存在于 ViewPager 和 FragmentStatePagerAdapter 中。

它们位于滑动标签中。它们被创建一次,永远不会被解雇或删除或内存不足。

到目前为止,该应用程序运行良好,但我需要弄清楚如何让片段知道它们自己的索引(1,2 或 3)。

有没有像这样的代码:

int myIndex = summonTheAllKnowingThing.getWhatFragmentThisIsPlease();

我可以在以下代码的某处添加吗?

public class BlankFragment extends Fragment implements View.OnClickListener {

    private boolean isDone = false;


    EditText persons_name;

    Spinner disc1_spinner;
    Spinner disc2_spinner;
    Spinner disc3_spinner;

    Spinner fee1_spinner;
    Spinner fee2_spinner;

    EditText custom_disc;

    EditText custom_fee;

    Button doneButton;


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


    public static BlankFragment newInstance() {
        BlankFragment fragment = new BlankFragment();

        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        View v = inflater.inflate(R.layout.fragment_blank, container, false);

        doneButton = (Button) v.findViewById(R.id.doneButton);
        doneButton.setOnClickListener(this);
        return v;

    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // getView().findViewById(R.id.

        persons_name = (EditText) getView().findViewById(R.id.NAME);

        disc1_spinner = (Spinner) getView().findViewById(R.id.DISC1);
        disc2_spinner = (Spinner) getView().findViewById(R.id.DISC2);
        disc3_spinner = (Spinner) getView().findViewById(R.id.DISC3);

        custom_disc = (EditText) getView().findViewById(R.id.customDISC);
        custom_fee = (EditText) getView().findViewById(R.id.customFEE);



    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.doneButton:

                if MainActivity.is1Done
                doneButton.setBackgroundColor(Color.RED);
                MainActivity.name1 = persons_name.getText().toString();

                break;
        }
    }

}

最好的方法是在寻呼机适配器中创建片段时传递索引,如

 @Override
        public Fragment getItem(int position) {
            return BlankFragment.newInstance(position);
        }

BlankFragment将是

public class BlankFragment extends Fragment implements View.OnClickListener {

        private int myIndex; //<-- access it for getting its index
        //.. some other variables
        public BlankFragment() {
            // Required empty public constructor
        }


        public static BlankFragment newInstance(int indexInPager) {
            BlankFragment fragment = new BlankFragment();
            Bundle bundle = new Bundle();
            bundle.putInt("index",indexInPager);
            fragment.setArguments(bundle);
            return fragment;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
           myIndex = getArguments().getInt("index");
           View v = inflater.inflate(R.layout.fragment_blank, container, false);
           doneButton = (Button) v.findViewById(R.id.doneButton);
           doneButton.setOnClickListener(this);
           return v;
        }
        //.. some other code
  }