简体   繁体   English

android无法从一个选项卡切换到另一个

[英]android Not able to switch from One tab to another

I want to switch from one Tab to another tab. 我想从一个选项卡切换到另一个选项卡。 For that i am using below code: 为此,我正在使用下面的代码:

public void switchTabInActivity(int indexTabToSwitchTo){
    AccidentTabActivity ParentActivity;
    ParentActivity = (AccidentTabActivity) getParent(); // here i am getting exception
    ParentActivity.switchTab(indexTabToSwitchTo);
    }

I am calling this method from which i want to navigate. 我正在调用要导航的方法。

But i got exception of cast class. 但是我有演员表类的例外。

Log cat: 日志猫:

10-04 15:39:22.327: ERROR/AndroidRuntime(1016): FATAL EXCEPTION: main
10-04 15:39:22.327: ERROR/AndroidRuntime(1016): java.lang.ClassCastException: com.project.AccidentApp.TabGroupHomeActivity
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at com.project.AccidentApp.KnowWhatToDoMenuActivity.switchTabInActivity(KnowWhatToDoMenuActivity.java:189)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at com.project.AccidentApp.KnowWhatToDoMenuActivity$3.onClick(KnowWhatToDoMenuActivity.java:155)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at android.os.Looper.loop(Looper.java:130)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at android.app.ActivityThread.main(ActivityThread.java:3683)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at java.lang.reflect.Method.invokeNative(Native Method)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at java.lang.reflect.Method.invoke(Method.java:507)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-04 15:39:22.327: ERROR/AndroidRuntime(1016):     at dalvik.system.NativeStart.main(Native Method)

UPDATED 更新

TabGroupHomeActivity.java TabGroupHomeActivity.java

public class TabGroupHomeActivity extends TabGroupActivity{ 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startChildActivity("KnowWhatToDoMenuActivity", new Intent(this,KnowWhatToDoMenuActivity.class));
    }


}

AccidentTabActivity.java AccidentTabActivity.java

public class AccidentTabActivity extends TabActivity 
{
    private TabHost tabHost;
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_tab);

        tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        /////////////////////////////
        intent = new Intent().setClass(this,TabGroupHomeActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("Menu").setIndicator(prepareTabView("Menu",R.drawable.menul)).setContent(intent);
        tabHost.addTab(spec); // error at this line

        intent = new Intent().setClass(this,TabGroupStepsActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("Steps").setIndicator(prepareTabView("Steps",R.drawable.tab_step)).setContent(intent);
        tabHost.addTab(spec); 

        intent = new Intent().setClass(this,TabGroupProfileActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("Profile").setIndicator(prepareTabView("Profile",R.drawable.tab_profile)).setContent(intent);
        tabHost.addTab(spec);       

        intent = new Intent().setClass(this,TabGroupContactUsActivity.class);
        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("Contact").setIndicator(prepareTabView("Menu",R.drawable.tab_contact)).setContent(intent);
        tabHost.addTab(spec);


        tabHost.setCurrentTab(0);




    }

     private View prepareTabView(String text, int resId) {
         View view = LayoutInflater.from(this).inflate(R.layout.tabs, null);
         ImageView iv = (ImageView) view.findViewById(R.id.tabImageView);
         TextView tv = (TextView) view.findViewById(R.id.tabTextView);
         iv.setImageResource(resId);
         tv.setText(text);
         return view;
    }

     public void switchTab(int tab){

         //getLocalActivityManager().getActivity(tab);
            //String strTab = ""+tab;
            tabHost.setCurrentTab(tab);


    }
}

Try to declare tabhost as static and call in child activity as below.. 尝试将tabhost声明为静态,并按如下所示调用子活动。

Instead private TabHost tabHost; 而是私有TabHost tabHost;

try static TabHost tabHost; 尝试静态TabHost tabHost;

And in your Child Activity 在您的孩子活动中

 AccidentTabActivity.tabHost.setCurrentTab(2);

Then you can set your current tab as you want. 然后,您可以根据需要设置当前选项卡。

From your exception getParent() is not giving you an instance of AccidentTabActivity . 从您的异常中, getParent()没有给您AccidentTabActivity的实例。 Can you show us AccidentTabActivity and TabGroupHomeActivity classes? 您可以向我们展示AccidentTabActivityTabGroupHomeActivity类吗? I don't think we'll be able to help you debug without thoses classes. 我认为如果没有这些课程,我们将无法帮助您进行调试。

Ps: Java conventions stipulates not to start variable names with uppercase as in your code AccidentTabActivity ParentActivity; 附:Java约定规定,不要像代码中的AccidentTabActivity ParentActivity;那样以大写字母开头变量名AccidentTabActivity ParentActivity; see http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html . 参见http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html Not a critism, but your code will be more readable. 并不是很严格,但是您的代码将更具可读性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM