Android:来自ID的Spinner始终为空

时间:2013-06-30 01:11:35

标签: android android-activity null spinner fragment

我有片段和活动。活动使片段膨胀。片段的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);
        }
}

2 个答案:

答案 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。