Почему эта программа неожиданно останавливается?

1

Почему этот код не работает? Я застрял на этом в течение 2 дней.

public  class SongsActivity extends Activity{

        DemoView demoview ;
        FinalView finalview;
        ViewFlipper c ;
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            demoview = new DemoView(this);
            finalview = new FinalView(this);
               // adding view to the viewflipper
            c.addView(demoview,0);
            c.addView(finalview, 1);
                ///initializing the fliiper
            c=(ViewFlipper)findViewById(R.id.viewFlipper1);

            c.setAutoStart(true);
            c.setFlipInterval(500);
            c.startFlipping();

        }
  • 0
    Я думаю, что Буякка определил проблему: просто переместите вызовы addView чтобы потом приходить после того, как вы присвоили значение c . В целом, однако, вы должны опубликовать вывод logcat, показывающий, какое исключение вызывает сбой вашей программы.
  • 0
    @ted HOpp вот мой файл
Показать ещё 8 комментариев
Теги:

2 ответа

2
Лучший ответ

Вы не можете использовать findViewById перед настройкой вида своей Activity с помощью setContentView.

Хотя ответ Booyakka является частично правильным, вы не настраиваете представление контента ничем, содержащим ViewFlipper с resId R.id.viewFlipper1.

В результате линия...

c=(ViewFlipper)findViewById(R.id.viewFlipper1);

Устанавливает c в null, даже если вы инициализировали его как предложение Booyakka.

Почему вы не используете setContentView(...) с макетом xml? Тот факт, что вы пытаетесь найти представление с resId R.id.viewFlipper1 предполагает, что вы создали макет xml, но вы его не раздуваете и не являетесь причиной вашей проблемы.

EDIT: раздувание макета приводит к содержимому файла макета XML и созданию экземпляров объектов, которые он описывает. Сделайте это с помощью setContentView(<layout-resource-id>) прежде чем пытаться использовать findViewById

Попробуйте изменить метод onCreate() как onCreate() ниже, используя имя созданного файла макета.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Inflate the main.xml file using the following...
    setContentView(R.layout.main);

    // Move the findViewById(...) call to here...
    c=(ViewFlipper)findViewById(R.id.viewFlipper1);

    demoview = new DemoView(this);
    finalview = new FinalView(this);

    c.addView(demoview,0);
    c.addView(finalview, 1);

    c.setAutoStart(true);
    c.setFlipInterval(500);
    c.startFlipping();
}
  • 0
    в чем смысл надувать?
  • 0
    См. РЕДАКТИРОВАТЬ до конца моего ответа выше.
Показать ещё 3 комментария
2

вы добавляете представление перед инициализацией.

когда вы вызываете c.addView(demoview, 0); c имеет значение null, поскольку он не был инициализирован. поэтому инициализируйте c с помощью ViewFlipper и добавьте представления после.

  • 0
    после изменения этого кода также отображается ошибка.
  • 0
    Тогда вы сделали еще одну ошибку. Опубликуйте новый журнал ошибок как комментарий.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню