android - 使用按钮在选项卡之间切换

标签 android

有谁知道如何创建一个按钮来帮助我在选项卡之间切换?

Button button1 = (Button) findViewById(R.id.button1);    
    button1.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {{
            // Perform action on click   
                if (v.getId() == R.id.button1) {
                    setContentView(R.layout.tab3);    
                }
                else if (v.getId() == R.id.button1) {
                    setContentView(R.layout.main);  
                }
            }
        }
    });
}}

这是我的选项卡 1 中的代码,下一个代码是我的 tab.xml 中的按钮。我想按下面的购买按钮,然后转到另一个选项卡,这可能吗?

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/imageButton1"
        android:text="Buy"  
        android:onClick="tab3" />

这是我的logcat文件

01-05 16:04:20.903: D/dalvikvm(215): GC freed 806 objects / 70928 bytes in 96ms
01-05 15:30:29.072: D/AndroidRuntime(213): Shutting down VM
01-05 15:30:29.082: W/dalvikvm(213): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
01-05 15:30:29.082: E/AndroidRuntime(213): Uncaught handler: thread main exiting due to uncaught exception
01-05 15:30:29.132: E/AndroidRuntime(213): java.lang.IllegalStateException: Could not find a method tab3(View) in the activity
01-05 15:30:29.132: E/AndroidRuntime(213):  at android.view.View$1.onClick(View.java:2020)
01-05 15:30:29.132: E/AndroidRuntime(213):  at android.view.View.performClick(View.java:2364)
01-05 15:30:29.132: E/AndroidRuntime(213):  at android.view.View.onTouchEvent(View.java:4179)
01-05 15:30:29.132: E/AndroidRuntime(213):  at android.widget.TextView.onTouchEvent(TextView.java:6541)
01-05 15:30:29.132: E/AndroidRuntime(213):  at android.view.View.dispatchTouchEvent(View.java:3709)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
01-05 16:04:25.693: E/AndroidRuntime(215):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
01-05 16:04:25.693: E/AndroidRuntime(215):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
01-05 16:04:25.693: E/AndroidRuntime(215):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.os.Looper.loop(Looper.java:123)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.app.ActivityThread.main(ActivityThread.java:4363)
01-05 16:04:25.693: E/AndroidRuntime(215):  at java.lang.reflect.Method.invokeNative(Native Method)
01-05 16:04:25.693: E/AndroidRuntime(215):  at java.lang.reflect.Method.invoke(Method.java:521)
01-05 16:04:25.693: E/AndroidRuntime(215):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-05 16:04:25.693: E/AndroidRuntime(215):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-05 16:04:25.693: E/AndroidRuntime(215):  at dalvik.system.NativeStart.main(Native Method)
01-05 16:04:25.693: E/AndroidRuntime(215): Caused by: java.lang.NoSuchMethodException: Tab3
01-05 16:04:25.693: E/AndroidRuntime(215):  at java.lang.ClassCache.findMethodByName(ClassCache.java:308)
01-05 16:04:25.693: E/AndroidRuntime(215):  at java.lang.Class.getMethod(Class.java:1014)
01-05 16:04:25.693: E/AndroidRuntime(215):  at android.view.View$1.onClick(View.java:2017)
01-05 16:04:25.693: E/AndroidRuntime(215):  ... 25 more
01-05 16:04:25.733: I/dalvikvm(215): threadid=7: reacting to signal 3
01-05 16:04:25.733: I/dalvikvm(215): Wrote stack trace to '/data/anr/traces.txt'
01-05 16:04:27.505: I/Process(215): Sending signal. PID: 215 SIG: 9

最佳答案

+1 Midoalageb 和 +1 Mark Gjol 已经为您提供了切换选项卡所需的确切信息。他们遗漏的是您尝试执行的事件的代码。您需要做的是在 TAB1 上设置一个按钮,该按钮将有一个 onClick() 监听器,该监听器将调用 getTabHost().setCurrentTabByTag(TAB2); getTabHost().setCurrentTab(1);。这些中的任何一个都可以正常工作,只是取决于你想怎么做。

你知道如何做按钮和onClick()监听器吗?如果没有,谷歌有一些很好的例子。只需在您的 tabView 中创建一个按钮,然后设置 onClick,然后将您的代码放在那里以切换到您想要的选项卡。

Another post这与可能对您有所帮助的这个非常相似。


getTabHost().setCurrentTabByTag(TAB2);

这将查找标有“TAB2”的选项卡并切换到该选项卡。


getTabHost().setCurrentTab(1);

这将查找索引为“1”的选项卡并切换到该选项卡。


关于您的 xml

xml 文件主要用于从 View 的实现中抽象定义 View 。这允许您或其他开发人员在需要时为您的代码提供不同的 View 。它有助于提供一种使用 MVC 的方法图案。然而,这种模式在 Android 中略有不同,但 xml 文件最常被认为是该模式中的 View 。

是的,如果您要有多个按钮,它们将需要在您的 xml 中定义并在您的代码中实现。


关于您的按钮困境

API for Button from google实际上在首页上为您提供了一个示例。请记住,作为一个开发平台,Android 正在迅速成熟,并且很多此类内容实际上已经在网上得到了很好的记录。 API 文档也非常好,并提供了很好的示例。去那里阅读它,您很可能会在那里解决很多更简单的问题。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView textview = new TextView(this);
    textview.setText("This is Tab1");
    setContentView(textview);

    final Button button = (Button) findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Perform action on click
            // perform the switch to tab event here for instance...
            getTabHost().setCurrentTabByTag("TAB2");
        }
    });
}

关于android - 使用按钮在选项卡之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8727311/

相关文章:

java - 抽屉导航 fragment 图标不显示

android - 当我在 android 中写入文件时,它会覆盖以前存在的内容

java - Gplus 用户身份验证和在同一 Activity 中获取用户位置

java - eclipse 朱诺 奇怪的人物出现

java - 如何运行启动画面,然后介绍 slider ,然后运行主要 Activity

java - 无法在全新安装的 Android Studio 0.8.1 上启动 Gradle 守护进程

安卓下拉菜单

android - 在android中获取选定月份和年份的日期列表/数组

android - 图片未显示在 ScrollView 中的android imageview中

android - 请告诉我有关Java移动应用程序的信息