【问题标题】:How to get fragment index from within itself?如何从自身内部获取片段索引?
【发布时间】:2018-03-09 05:54:32
【问题描述】:

我有 3 个从同一个类文件生成的片段。这三个片段存在于 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;
        }
    }

}

【问题讨论】:

    标签: android android-viewpager fragment adapter


    【解决方案1】:

    最好的方法是在页面适配器中创建片段时传递索引

     @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
      }
    

    【讨论】:

    • 我没有使用 "someOtherFragment" ... 我可以说 return BlankFragment.newInstance(0) .... 和 Blank(1), (2) 吗?
    • 谢谢哥们!你给了我足够的信息来让它工作......我使私有 int myIndex 不是静态的,并将 myIndex = indexinPager 更改为 fragment.myIndex = indexinPager。而且,当然,在 getItem 方法中的所有情况下都使用了 BlankFragment。谢谢!
    • 好吧,我已经根据您的要求更新了答案:)
    猜你喜欢
    • 2010-10-25
    • 2015-02-13
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多