2012-03-27 15 views
1

Ich habe diesen Code:Fehler Erste Schritte auf 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); 
     } 
} 

nach einer Folge von Verfahren wieder .onResume wie folgt aufgerufen:

       tabHost.clearAllTabs(); 

           onResume(); 

Dieser Code funktioniert gut, wenn der Benutzer in der ersten Registerkarte ist aber wie wir in anderen Reiter zu nennen onResume Methode versuchen, gibt es eine Nullpointer:

 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) 

Bitte helfen sie mir dieses problem.I am newbie zu lösen?

Whole Code Herausgegeben

Diese sind die anderen Methoden:

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) 

zweiten Tab-Code

public class Att_Test Aktivität erstreckt {

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

Verschieben Sie den gesamten Code von Ihrer ** onResume ** zu ** onCreate ** Methode – waqaslam

Antwort

2

Versuchen Sie diese

tabHost.setCurrentTabByTag("tab1"); 

Das ist Arbeit mit mir. Hoffe, es wird Ihnen auch helfen ..

Dank ...

+0

Es funktioniert nicht das gleiche Problem! – Navdroid

1

Ich glaube, Sie die folgende Funktion von Kindheit an Aktivität des TabActivity nennen.

tabHost.clearAllTabs(); 

Dadurch werden alle mit dem Registerkarten-Host verbundenen Registerkarten entfernt. Es kann also nichts angezeigt werden, wenn nichts angezeigt wird.

Ich bin mir nicht ganz sicher, aber ich würde auf diese Weise überprüfen.


In Bezug auf die vorherige Antwort, hier ist ein Weg, um eine TabHost Methode von Kindheit an Aktivität zu nennen:

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

ich dabei helfen kann hoffen.

+0

Aber das funktioniert so gut, wenn der Benutzer in der ersten Registerkarte ist..das Problem besteht nur, wenn ich die Registerkarte wechseln und onresume() aufrufen – Navdroid

0

Sie können Registerkarte Aktivität nicht auf Resume-Methode hantieren.Ich habe das gleiche Problem, weil in Tab-Aktivität kann verwendet werden, WindowssonFoucs -Methode können Sie nicht onResume -Methode behandeln. Sie können Ihren Code onCreate-Methode einfügen.

+0

Aber das funktioniert so gut, wenn Benutzer in der ersten Registerkarte ist..das Problem besteht nur, wenn ich Ändern Sie die Registerkarte und Call onResume() – Navdroid

+0

zeigen Sie alle Code –

1

Ok, ist so hier ein Verfahren zur Herstellung eines neuen Tab zu erstellen:

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); 
} 

Sie alle hinzufügen können Sie Ihre Tabs, wie die

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); 
} 

Und schließlich hinzufügen, dass auf Ihre onResume Methode:

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

    setTabs(); 
} 

Es sollte funktionieren.

+0

Immer noch nicht funktioniert gleichen Fehler – Navdroid

+0

Weird, können Sie versuchen, alle Verweise auf "tabHost.clearAllTabs();" – Manitoba

+0

ja ich habe es versucht aber kein glück – Navdroid