Создание блесны динамически - PullRequest
3 голосов
/ 15 августа 2011

Я изо всех сил пытался создать спиннер динамически.У меня было это на странице, но каждый раз, когда я пытался выбрать опцию, это взрывалось.Мой оригинальный код внизу.Я исправил это, переместив функцию addSpinner() за пределы внутреннего класса и изменив

Spinner newSpinner = new Spinner(getApplicationContext());

на

Spinner newSpinner = new Spinner(this);

Это исправлено, но я понятия не имею, что изначально не работало,Кто-нибудь может объяснить?(извиняюсь, если это нубский вопрос - я новичок как в Java, так и в Android)

public class SpotManageActivity extends Activity
{
    private SimpleCursorAdapter mSpots;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reminder_manage_activity);

        Button add_new_button = (Button) findViewById(R.id.add_new_spot_button);
        add_new_button.setOnClickListener(new ButtonOnClickListener());

    }

    public class ButtonOnClickListener implements View.OnClickListener
    {
        @Override
        public void onClick(View v)
        {
            addSpinner();
        }

        private void addSpinner()
        {
            LinearLayout layoutHolder = 
                (LinearLayout) findViewById(R.id.layout_holder);

            LinearLayout spinnerHolder = new LinearLayout(getApplicationContext());
            spinnerHolder.setOrientation(LinearLayout.HORIZONTAL);

            spinnerHolder.setLayoutParams(
                new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.FILL_PARENT, 
                    LinearLayout.LayoutParams.WRAP_CONTENT, 1f));
            Spinner newSpinner = new Spinner(getApplicationContext());
            newSpinner.setLayoutParams(
                new Spinner.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 
                    ViewGroup.LayoutParams.WRAP_CONTENT));
            newSpinner.setAdapter(mSpots);

            layoutHolder.addView(spinnerHolder);
            spinnerHolder.addView(newSpinner);

            // A non-internal spot was selected
        }

    }

}

1 Ответ

2 голосов
/ 02 октября 2011

Я совсем не уверен, но если в трассировке стека вы получаете что-то о неправильном контексте, это может быть потому, что Spinner при нажатии открывает диалог, а диалогу нужен контекст Activity.

Для получения дополнительной информации:

...