Android - 可见和不可见的标签:按钮处理

时间:2011-04-12 05:14:08

标签: android interface tabbed

我正在尝试创建一个显示登录屏幕的应用程序,并在各种其他选项卡中产生效果。

我的选项卡式实现工作正常:我可以隐藏选项卡并查看其他选项卡的布局 - 但是,我不能让它们重新出现。当我不尝试按钮处理时,程序运行正常,但每当我启动我的监听器时,我强行关闭。

附件是问题代码:我无法确切地找到我接近力的位置,但我确实知道它位于按钮监听器区域。

基本上,如果用户的名称和密码正确,我希望显示标签。

您看到的是四个标签之一。具体来说,您正在查看登录屏幕选项卡。

CODE:

public class LoginActivity extends Activity {

TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.login);

    final Button btn = (Button) findViewById(R.id.login_button);

    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            EditText txt_username = (EditText) findViewById(R.id.txt_username);
            EditText txt_password = (EditText) findViewById(R.id.txt_username);

            if (txt_username.toString().equals("Bob")
                    && txt_password.toString().equals("123")) {
                tabHost.getTabWidget().getChildAt(0)
                        .setVisibility(View.VISIBLE);
                tabHost.getTabWidget().getChildAt(1)
                        .setVisibility(View.VISIBLE);
                tabHost.getTabWidget().getChildAt(2)
                        .setVisibility(View.VISIBLE);
                tabHost.getTabWidget().getChildAt(3)
                        .setVisibility(View.GONE);
            }
        }
    });
}
}

附件是logcat(很长)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480): FATAL EXCEPTION: main
04-12 17:07:31.465: ERROR/AndroidRuntime(1480): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.waiter/android.waiter.waiter}: java.lang.RuntimeException: Unable to start activity ComponentInfo{android.waiter/android.waiter.LoginActivityGroup}: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{android.waiter/android.waiter.LoginActivity}: java.lang.NullPointerException

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at android.os.Handler.dispatchMessage(Handler.java:99)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at android.os.Looper.loop(Looper.java:123)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at android.app.ActivityThread.main(ActivityThread.java:4627)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at java.lang.reflect.Method.invokeNative(Native Method)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at java.lang.reflect.Method.invoke(Method.java:521)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

04-12 17:07:31.465: ERROR/AndroidRuntime(1480):     at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

我建议你有两个单独的活动作为登录和其他活动与标签。所以你的代码只有一个简单的改变:

btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            EditText txt_username = (EditText) findViewById(R.id.txt_username);
            EditText txt_password = (EditText) findViewById(R.id.txt_username);

            if (txt_username.toString().equals("Bob")
                    && txt_password.toString().equals("123")) {
                startActivity(new Intent(this,YourTabActivity.class));
            }
        }
    });

我使用TabLayout作为标签式视图,很容易实现。但是随意使用您喜欢的视图并且您知道更好