1

私はこのコードを持っています:

       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 メソッドを呼び出そうとすると、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)

この問題を解決するのを手伝ってください.私は初心者ですか?

編集されたコード全体

その他の方法は次のとおりです。

    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)

2 番目のタブ コード

public class Att_Test extends Activity{

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



}
4

4 に答える 4

2

これを試して

 tabHost.setCurrentTabByTag("tab1");

これは私と一緒に仕事です。それもあなたに役立つことを願っています..

ありがとう...

于 2012-03-27T13:31:43.453 に答える
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();
}

それはうまくいくはずです。

于 2012-03-27T14:30:51.997 に答える
1

TabActivity の子アクティビティから次の関数を呼び出していると思います。

tabHost.clearAllTabs();

これにより、タブ ホストに関連付けられているすべてのタブが削除されます。したがって、表示するものがない場合は何も表示できません。

私はそれについて完全には確信が持てませんが、私はそのようにチェックインします。


前の回答に関して、子アクティビティから tabHost メソッドを呼び出す方法は次のとおりです。

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

これが役立つことを願っています。

于 2012-03-27T13:51:24.893 に答える
0

Resume メソッドでタブ アクティビティを処理することはできません。タブ アクティビティでは onResume メソッドを処理できない windowssonFoucs メソッドを使用できるため、同じ問題があります。コードを onCreate メソッドに貼り付けることができます。

于 2012-03-27T13:51:32.743 に答える