我有片段和活动。活动使片段膨胀。片段的xml文件包含微调器的@ + id。
在活动的onCreate中,我试图从片段中获取微调器。
Spinner mySpinner = (Spinner)findViewById(R.id.mySpinner);
mySpinner一直回归为null。我完全确定ID是正确的。
我该如何解决这个问题?
编辑: 以下是该活动的完整onCreate:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.newtimer);
myArray = this.getResources().getStringArray(R.array.myspinner);
db = new DBAdapter(this);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle type = getIntent().getExtras();
String stringType = type.getString("type");
if (stringType.equals(A_STRING_HERE))
{
MyCustomFragment myFragment = new MyCustomFragment();
fragmentTransaction.replace(R.id.fragmentContainer, myFragment); // fragmentContainer is a FrameLayout that I use to swap with fragments
fragmentTransaction.commit();
fragmentManager.executePendingTransactions();
//TODO Load active timers
db.open();
Cursor myCursor = db.getEntry(0);
if(myCursor.moveToFirst())
{
String curr = myCursor.getString(2);
Spinner mySpinner = (Spinner)findViewById(R.id.myspinner;
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.myspinner,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
if (myspinnerr == null)
{
Log.d("NewTimerActivity", "spinner is null!");
}
myspinner.setAdapter(adapter);
int i = java.util.Arrays.asList(myArray).indexOf(curr);
myspinner.setSelection(i);
}
}
答案 0 :(得分:1)
您应该在Fragment
而不是Activity
中使用此功能。
尝试类似
的内容Spinner mySpinner = (Spinner)getView().findViewById(R.id.mySpinner);
在Fragment
中。原因是它是你的片段实际上有视图,而不是活动。
基于你的onCreate编辑:
Spinner mySpinner = (Spinner)myFragment.getView().findViewById(R.id.mySpinner);
答案 1 :(得分:-1)
默认情况下,微调器将在其中选择一个项目,因此应禁用微调器项目的位置0。