在我的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");
}
}
}
}
答案 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);
因为你的一个片段包含微调器,所以你必须从片段中获取微调器引用,而不是从活动中获取!