2011-09-15 6 views
1

탭 단추를 클릭하면 onCreate 메서드가 두 번 호출되는 것 같습니다. 탭 호스트를 만드는 또 다른 방법이 있습니까? 내 코드 heres :Tabhost 탭 onCreate 메서드가 두 번 호출됩니다.

public class MyTabHostActivity extends TabActivity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tabactivity); 

    TabHost tabHost=getTabHost(); 
    setup(tabHost);  
} 


private void setup(TabHost tabHost) 
{ 
    Intent intent1 = new Intent(this, Activity1.class); 
    setupTab("Activity1", tabHost, intent1); 

    Intent intent2 = new Intent(this,Activity2.class); 
    setupTab("Activity2", tabHost, intent2); 

    Intent intent3 = new Intent(this,Activity3.class); 
    setupTab("Activity3", tabHost, intent3);  
} 

private void setupTab(final String tag, final TabHost mTabHost, Intent intent) { 
    View tabview = createTabView(mTabHost.getContext(), tag, mTabHost); 
    TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(intent); 
    mTabHost.addTab(setContent); 
} 

private static View createTabView(final Context context, final String text, final TabHost mTabHost) { 
    View view = LayoutInflater.from(context).inflate(R.layout.tab_bg, null); 
    TextView tv = (TextView) view.findViewById(R.id.tabsText); 
    tv.setText(text); 
    return view; 
} 
} 

public class Activity1 extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Log.d("Activity1", "onCreate"); 

} 

} 

public class Activity2 extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Log.d("Activity2", "onCreate"); 

} 

} 
public class Activity3 extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Log.d("Activity3", "onCreate"); 

} 

} 

tabactivity.xml 
<?xml version="1.0" encoding="utf-8"?> 
<TabHost android:layout_width="fill_parent" 
android:layout_height="fill_parent" android:id="@android:id/tabhost" 
xmlns:android="http://schemas.android.com/apk/res/android"> 


<TabWidget android:layout_width="fill_parent" android:layout_gravity="bottom" 
    android:layout_height="wrap_content" android:id="@android:id/tabs" /> 

<FrameLayout android:layout_width="fill_parent" android:paddingBottom="45dp" 
    android:layout_height="wrap_content" android:id="@android:id/tabcontent"> 
</FrameLayout> 
</TabHost> 

tab_bg.xml 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tabsLayout" android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="10dip" android:gravity="center" android:orientation="vertical"> 

<TextView android:id="@+id/tabsText" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="15dip" /> 
</LinearLayout> 
main.xml 
<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
     > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
/> 
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" /> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".MyTabHostActivity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Activity1" android:screenOrientation="portrait" /> 
    <activity android:name=".Activity2" android:screenOrientation="portrait" /> 
    <activity android:name=".Activity3" android:screenOrientation="portrait" /> 
</application> 
</manifest> 
+0

괜찮습니다. 이상합니다. 오늘날 onCreate 메소드는 한 번만 호출됩니다. 어제 로그에 onCreate가 두 번 호출 된 것으로 나타났습니다 ... –

답변

-2

두 번 호출되지 않습니다. emulator에서 코드를 실행하고 메소드가 두 번 실행되는 것을 확인할 수 있습니다. 하지만 이것은 emulator에있는 버그이며 이는 실제 장치에서는 발생하지 않습니다.

+0

나는 에뮬레이터에서 코드를 실행하지 않을 것입니다. –

+0

이것은 나에게도 일어나며 에뮬레이터에서 앱을 실행하지 않습니다. – CQM

관련 문제