查看寻呼机上下文问题

时间:2015-08-18 05:24:59

标签: android android-fragments fragmentstatepageradapter

在我的MainActivity中,我试图获取位于片段上的控件(微调器)的上下文。我正在使用FragmentStatePagerAdapter来管理片段。我的onCreate()的最后一行抛出异常,因为mSpinner一直返回null。我已经尝试了两种不同的方式,如图所示:

mSpinner = (Spinner) mVP.findViewById(R.id.spinner1);

我假设我的背景不正确,但没有经验知道如何修复而不盲目猜测。感谢您提前提供的任何建设性帮助! :)

我的代码如下所示:

public class MainActivity extends FragmentActivity {
    MyAdapter mAdapter;
    ViewPager mVP;
    Spinner mSpinner;
    Spinner.OnItemSelectedListener onSpinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAdapter = new MyAdapter(getSupportFragmentManager());
        mVP = (ViewPager) findViewById(R.id.viewPager);
        mVP.setAdapter(mAdapter);
        mSpinner = (Spinner) findViewById(R.id.spinner1);
    }

    public static class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return 5;
        }

        @Override
        public Fragment getItem(int pos) {
            switch (pos) {

                case 0:return FirstFragment.newInstance("FirstFragment, Instance 1");
                case 1:return SecondFragment.newInstance("SecondFragment, Instance 1");
                case 2:return ThirdFragment.newInstance("ThirdFragment, Instance 1");
                case 3:return ThirdFragment.newInstance("ThirdFragment, Instance 2");
                case 4:return ThirdFragment.newInstance("ThirdFragment, Instance 3");
                default:return ThirdFragment.newInstance("ThirdFragment, Default");
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以通过这种方式获取Fragment视图,然后使用Fragment的视图使用findViewById()查找Spinner。

试试这个。

View fragment_view = getLayoutInflater().inflate(R.layout.fragment_view, null);
Spinner mSpinner = (Spinner) fragment_view.findViewById(R.id.spinner1);

我希望它有所帮助!

答案 1 :(得分:1)

  

我正在尝试获取位于片段上的控件(微调器)的上下文。

这不起作用:

mSpinner = (Spinner) findViewById(R.id.spinner1);

因为你的一个片段包含微调器,所以你必须从片段中获取微调器引用,而不是从活动中获取!