Почему этот код не работает? Я застрял на этом в течение 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();
}
Вы не можете использовать 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();
}
вы добавляете представление перед инициализацией.
когда вы вызываете c.addView(demoview, 0); c имеет значение null, поскольку он не был инициализирован. поэтому инициализируйте c с помощью ViewFlipper и добавьте представления после.
addView
чтобы потом приходить после того, как вы присвоили значениеc
. В целом, однако, вы должны опубликовать вывод logcat, показывающий, какое исключение вызывает сбой вашей программы.