2012-03-27 43 views
1

的錯誤,我有這樣的代碼:獲取有關TabHost

 public void onResume() 
{ 
    super.onResume(); 

     tabHost=getTabHost(); 



     tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("All").setContent(new Intent(this, AllTest.class) 
       .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); 

     tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("Attempted").setContent(
       new Intent(this, Att_Test.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); 

     tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("Unattempted").setContent(
       new Intent(this, SyncAlbum.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); 

     tabHost.addTab(tabHost.newTabSpec("tab4").setIndicator("New").setContent(
       new Intent(this, SyncTest.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); 



     tabHost.getTabWidget().getChildAt(0).getLayoutParams().height =35; 

     tabHost.getTabWidget().getChildAt(1).getLayoutParams().height =35; 
     tabHost.getTabWidget().getChildAt(2).getLayoutParams().height =35; 
     tabHost.getTabWidget().getChildAt(3).getLayoutParams().height =35; 

     if(tabbed.equals("Att_Test")){ 
     tabHost.setCurrentTab(1); 
     } 
     else 
     { 
      tabHost.setCurrentTab(0); 
     } 
} 

方法的序列.onResume又被稱爲像這樣經過:

       tabHost.clearAllTabs(); 

           onResume(); 

此代碼工作正常時,用戶在第一個選項卡,但當我們試圖調用的onResume方法在其他標籤中,給出了一個空指針:

 03-27 18:48:05.833: E/AndroidRuntime(18564): FATAL EXCEPTION: main 
     03-27 18:48:05.833: E/AndroidRuntime(18564): java.lang.NullPointerException 
     03-27 18:48:05.833: E/AndroidRuntime(18564):  at    android.widget.TabWidget.setCurrentTab(TabWidget.java:339) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.TabWidget.focusCurrentTab(TabWidget.java:363) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.TabHost.setCurrentTab(TabHost.java:320) 
     03-27 18:48:05.833: E/AndroidRuntime(18564):  at android.widget.TabHost.addTab(TabHost.java:213) 
     03-27 18:48:05.833: E/AndroidRuntime(18564):  at com.cuelearn.main.TestTab.onResume(TestTab.java:65) 
     03-27 18:48:05.833: E/AndroidRuntime(18564):  at com.cuelearn.main.TestTab$3$1.onClick(TestTab.java:209) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:874) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at android.widget.ListView.performItemClick(ListView.java:3382) 
     03-27 18:48:05.833: E/AndroidRuntime(18564):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at android.os.Handler.handleCallback(Handler.java:587) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at android.os.Handler.dispatchMessage(Handler.java:92) 
     03-27 18:48:05.833: E/AndroidRuntime(18564): at android.os.Looper.loop(Looper.java:123) 

請幫我解決這個疑難問題是新手?

編輯所有代碼

這些是其他的方法:

void setupView() 
{ 
      Button name=(Button)findViewById(R.id.name); 

     name.setText(login.A_students.STUDENT_NAME); 

     name.setOnClickListener(logout); 

     ((Button)findViewById(R.id.cuelearn)).setOnClickListener(cuelearnClicked); 

     courses course_db= new courses(this); 
     course_db.open(); 
     Cursor s=course_db.getrecord(CourseId); 


     coursename=(Button)findViewById(R.id.blank); 

     setCourseName(s.getString(2)); 
     coursename.setOnClickListener(course_nameClicked); 




} 

void setCourseName(String courseid) 
{ 
    coursename.setText(courseid); 


} 
private OnClickListener logout = new OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(TestTab.this); 
      builder.setMessage("Are you sure you want to Logout?") 
      .setCancelable(false) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        finish(); 
        startActivity(new Intent(TestTab.this,com.cuelearn.main.login.class)); 

       } 
      }) 
      .setNeutralButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 

      AlertDialog alert = builder.create(); 
      alert.show(); 

     }}; 
     private OnClickListener cuelearnClicked = new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       // TODO OnClickListener() 

       Intent intent = new Intent(TestTab.this, cuelearntwo.class) 

第二個選項卡代碼

公共類Att_Test延伸活動{

private testpapertable testpaper_db; 
private courses courses_db; 
private coursesclass A_courses=new coursesclass(); 
ArrayList<String> courseid; 
ArrayList<String> courseName; 


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

    TestTab.tabbed="Att_Test"; 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 


     System.out.println(TestTab.CourseId+"ALLTE"); 
    setContentView(R.layout.alltest); 

    showAllTestPapers(); 



} 
+0

將所有代碼從您的** onResume **移動到** onCreate **方法 – waqaslam 2012-03-27 13:30:38

回答

2

試試這個

tabHost.setCurrentTabByTag("tab1"); 

這是和我一起工作的。希望這將有助於你太..

謝謝...

+0

它不起作用相同的問題! – Navdroid 2012-03-27 13:39:20

1

我認爲你從TabActivity的子活動調用下面的函數。

tabHost.clearAllTabs(); 

這將刪除與選項卡主機關聯的所有選項卡。所以如果沒有什麼可以顯示的話,什麼都不能顯示。

我對此並不完全確定,但我會以這種方式檢查。


關於以前的答案,這裏是一個方法,從一個子活動調用tabHost方法:我希望這可以幫助

((TabActivity) getParent()).getTabHost().setCurrentTab(0); 

+0

但是,這是工作做精,當用戶在第一Tab..the問題只仍然存在,當我更改選項卡,並調用的onResume() – Navdroid 2012-03-27 13:54:51

0

您無法在Resume method.n中引用tab活動,因爲在tab活動中它可以使用windowsonFoucs方法,您無法處理onResume方法。您可以將代碼粘貼到創建方法上。

+0

但這種情況正在工作,所以罰款當用戶在第一Tab..the問題仍然存在,只有當我更改選項卡並致電onResume() – Navdroid 2012-03-27 13:55:04

+0

顯示您的所有代碼 – 2012-03-27 13:57:27

1

好了,所以這裏是創建一個新的選項卡的方法:

private static int label = 0; 

private void addTab(String name, Class<?> c) 
{ 
    TabHost tabHost = getTabHost(); 
    Intent intent = new Intent(this, c); 
    TabHost.TabSpec spec = tabHost.newTabSpec("tab_" + label++);  

    spec.setIndicator(name); 
    spec.setContent(intent); 
    tabHost.addTab(spec); 
} 

您可以添加所有標籤一樣,

private void addTabs() 
{ 
    addTab("All", AllTest.class); 
    addTab("Attempted", Att_Test.class); 
    addTab("Unattempted", SyncAlbum.class); 
    addTab("New", R.drawable.tab_indicator_location, SyncTest.class); 
} 

最後添加到您的onResume方法:

public void onResume() 
{ 
    super.onResume(); 

    setTabs(); 
} 

它應該工作。

+0

仍然不工作相同的錯誤 – Navdroid 2012-03-28 06:04:34

+0

怪異的,你可以嘗試刪除所有引用「tabHost.clearAllTabs();」 – Manitoba 2012-03-28 07:34:38

+0

是的,我已經試過,但沒有運氣 – Navdroid 2012-03-28 07:41:38