Я в настоящее время разрабатываю приложение и столкнулся с небольшой ошибкой, которую я могу исправить, но я бы предпочел знать, почему возникает моя ошибка. У меня есть интерфейс с вкладками, который использует TabWidget для создания трех вкладок. Моя ошибка лежит в первой вкладке, где я поместил ViewFlipper. ViewFlipper предназначен для переключения между двумя различными видами (используя два ViewStub для подключения к двум ранее разработанным макетам). В основном в первом представлении есть кнопка, которая при нажатии должна заменить ViewFlipper в текущей вкладке на следующее (или указанное) представление \ layout. Теперь моя ошибка появляется, когда приложение запускается впервые. Самый первый запрос к ViewFlipper (showNext или showPrevious или setDisplayChild) не зарегистрирован. Следующее нажатие (и нажатие кнопки после этого) правильно изменяет отображение. Я проверил с помощью LogCat, действительно ли кнопка вызывает зарегистрированную функцию onClick (определенную в макете XML), и кнопка действительно регистрирует щелчок. Еще раз проблема заключается именно в самом первом вызове изменения представления ViewFlipper, и каждый последующий вызов работает безупречно.
Любая помощь будет принята с благодарностью. Я готов выложить код, если это необходимо, но это довольно долго.
РЕДАКТИРОВАТЬ: Добавлен код.
Основной XML
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ViewFlipper android:id="@+id/tab1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- View 1 -->
<ViewStub android:id="@+id/stub1"
android:inflatedId="@+id/subTree1"
android:layout="@layout/layout_tab1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<!-- View 2 -->
<ViewStub android:id="@+id/stub2"
android:inflatedId="@+id/subTree2"
android:layout="@layout/layout_tab12"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</ViewFlipper>
<ViewFlipper android:id="@+id/tab2"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<!-- View 1 -->
<ViewStub android:id="@+id/stub3"
android:inflatedId="@+id/subTree3"
android:layout="@layout/layout_tab2"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</ViewFlipper>
<ViewFlipper android:id="@+id/tab3"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<!-- View 1 -->
<ViewStub android:id="@+id/stub4"
android:inflatedId="@+id/subTree4"
android:layout="@layout/layout_tab3"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<!-- View 2 -->
</ViewFlipper>
</FrameLayout>
</LinearLayout>
</TabHost>
Вкладка 1 XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabone"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:onClick="onButtonClick"/>
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Tab 1" />
</LinearLayout>
Код приложения
TabHost mTabHost;
TextView textCurrent;
ViewFlipper viewFlipper;
String tag = "Tag";
int value = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1").setContent(R.id.tab1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.tab2));
mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("TAB 3").setContent(R.id.tab3));
mTabHost.setCurrentTab(0);
mTabHost.setOnTabChangedListener(this);
}
public void onButtonClick(View v)
{
if(v.getId() == R.id.button1)
{
Log.d(tag, "Button Pressed");
viewFlipper = (ViewFlipper) findViewById(R.id.tab1);
viewFlipper.showNext();
/*
//HACK TO GET NEXT BUTTON WORKING
value++;
if(value == 1)
viewFlipper.showNext();
*/
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) { //Back key pressed
mTabHost = getTabHost();
if(mTabHost.getCurrentTab() == 0)
{
//Things to Do
viewFlipper = (ViewFlipper) findViewById(R.id.tab1);
viewFlipper.showPrevious();
}
else
{
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
public void onTabChanged(String arg0) {
// TODO Auto-generated method stub
if(arg0.equals("tab_test1"))
{
Log.d(tag, "Tab 1 Accessed");
viewFlipper = (ViewFlipper) findViewById(R.id.tab1);
int index = viewFlipper.indexOfChild(findViewById(R.id.subTree1));
viewFlipper.setDisplayedChild(index);
}
}