0

フラグメントとアクティビティがあります。アクティビティはフラグメントを膨張させます。フラグメントの 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);
        }
}
4

2 に答える 2

1

Fragmentこれは、ではなく、に含める必要がありますActivity

次のようなものを試してください

Spinner mySpinner = (Spinner)getView().findViewById(R.id.mySpinner);

あなたのFragment。その理由は、アクティビティではなく、実際にビューを持っているのはあなたのフラグメントだからです。

あなたのonCreateに基づいて編集:

Spinner mySpinner = (Spinner)myFragment.getView().findViewById(R.id.mySpinner);
于 2013-06-30T01:31:21.510 に答える
-1

デフォルトでは、スピナーはその中の 1 つのアイテムを選択するため、スピナー アイテムの位置 0 は無効にする必要があります。

于 2014-09-19T09:35:55.677 に答える