2012-03-27 73 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