2011-12-28 6 views
0

Я использую пользовательский TabWidget для отображения моих вкладок. Закладки прекрасно работают, когда я запускаю программу. Все выглядит красиво. Однако, когда я перезагружаю программу и, в соответствии с logcat, метод onResume() вызывается в моем виджетах вкладок, TabWidget отображает только верхнюю часть виджета. Вот XML для моего TabWidget.Tab Виджет не отображается правильно onResume()

<?xml version="1.0" encoding="utf-8"?> 
<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" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_above="@android:id/tabs"/> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="55dp" 
      android:layout_alignParentBottom="true" /> 

    </RelativeLayout> 

</TabHost> 

Это довольно простой ванильный материал здесь. Изменение layout_height не помогает.

Я в настоящее время не реализую onResume в моей TabWidget.java. Но все равно код.

public class TabWidget extends TabActivity { 

    private TabHost mTabHost; 

    private void setupTabHost() { 
     mTabHost = (TabHost) findViewById(android.R.id.tabhost); 
     mTabHost.setup(); 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.tabs); 

     Resources res = getResources(); // Resource object to get Drawables 
     TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); // The 
                     // activity 
                     // TabHost 

     TabHost.TabSpec spec; // Resusable TabSpec for each tab 
     Intent intent; // Reusable Intent for each tab 

     setupTabHost(); 
     // mTabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider); 

     // Dealer tab 
     Intent intentDealer = new Intent().setClass(this, DealerActivity.class); 
     int iconDealer = (R.drawable.ic_tab_dealer); 
     setupTab("Dealer", intentDealer, iconDealer); 

     // Department tab 
     Intent intentDept = new Intent().setClass(this, DeptActivity.class); 
     int iconDept = R.drawable.ic_tab_dept; 
     setupTab("Departments", intentDept, iconDept); 

     // PostBoard Activity 
     Intent intentBoard = new Intent().setClass(this, BoardActivity.class); 
     int iconBoard = R.drawable.ic_tab_board; 
     setupTab("Postboard", intentBoard, iconBoard); 

     // Social Network connection 
     // Check first to see if there are Social Network links if not don't 
     // show tab. 
     if (Startup.msMain.locations[Startup.nChosenLocation].social_media_feeds.length == 0) { 

     } else { 
      Intent intentSocial = new Intent().setClass(this, 
        SocialActivity.class); 
      int iconSocial = R.drawable.ic_tab_social; 
      setupTab("Social Media", intentSocial, iconSocial); 
     } 

     // Links Activity 
     Intent intentLinks = new Intent().setClass(this, LinksActivity.class); 
     int iconLinks = R.drawable.ic_tab_link; 
     setupTab("Links", intentLinks, iconLinks); 

     // set startup tab 
     tabHost.setCurrentTab(0); 
    } 

    private void setupTab(final String tag, Intent intent, int img) { 
     View tabview = createTabView(mTabHost.getContext(), tag, img); 

     TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview) 
       .setContent(intent); 

     mTabHost.addTab(setContent); 

    } 

    private static View createTabView(final Context context, final String text, 
      int img) { 
     View view = LayoutInflater.from(context) 
       .inflate(R.layout.tabs_bg, null); 
     TextView tv = (TextView) view.findViewById(R.id.tabsText); 
     tv.setText(text); 
     ImageView icon = (ImageView) view.findViewById(R.id.tabsIcon); 
     icon.setBackgroundDrawable(context.getResources().getDrawable(img)); 
     return view; 
    } 
} 

И для тщательности здесь мой логарифм, когда появляется ошибка.

12-28 10:10:00.963: I/ActivityManager(1305): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zocalolabs.demo/.SplashScreen } from pid 1470 
    12-28 10:10:01.034: W/InputManagerService(1305): Starting input on non-focused client [email protected] (uid=10001 pid=1470) 
    12-28 10:10:01.073: I/ActivityManager(1305): Resumed Activity: com.zocalolabs.demo/.TabWidget totalTime: 110 ms 

Есть ли способ, чтобы заставить мой виджет активности перерисовывать на onResume() или OnPause() заставить его полностью на убить активность, таким образом, заставляя его метода OnCreate снова? Или есть другой способ атаковать эту проблему? Спасибо за любые идеи!

+0

Так что, я полагаю, у меня нет очков для ответа на мой собственный вопрос, но оказалось, что виновник был – Rymnel

+0

на самом деле, если вы нашли ответ на свою собственную проблему, это хорошая практика, чтобы ответить на собственный вопрос, а затем выбрать его как правильный ответ. Не стесняйтесь! Таким образом, если кто-то найдет ваш вопрос/ответ полезным, они могут проголосовать за вас и дать вам кредит. http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions – Aurora

+0

Спасибо. Я пошел вперед и перешел к ответу. – Rymnel

ответ

2

Проблема заключалась в том, что

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 

было отсечение дно зрения деятельности. Я не знаю, является ли это ошибкой или что, но исправление должно было добавить следующую строку.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
      WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 

Надеюсь, это поможет кому-то еще.

 Смежные вопросы

  • Нет связанных вопросов^_^