【问题标题】:Android -- Changing Tab Visibility from Inside Tab ActivitiesAndroid - 从内部选项卡活动更改选项卡可见性
【发布时间】:2011-08-04 08:01:00
【问题描述】:

我目前正在尝试从其他活动内部更改选项卡——这很简单。但是,我在尝试设置其他选项卡的可见性时遇到了问题。

基本上,我有一个应用程序加载到一个选项卡(登录页面),而其他选项卡在用户登录之前是不可见的。

当用户登录时,我想让其他标签可见,而登录标签不可见。

如果有一个简单的方法可以做到这一点,请让我知道——我目前正在兜圈子:

代码片段:

在 TabHost 的 OnCreate 中:

.....

tabHost.setCurrentTab(3);

tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);
tabHost.getTabWidget().getChildAt(1).setVisibility(View.GONE);
tabHost.getTabWidget().getChildAt(2).setVisibility(View.GONE);

....

TabHost 的额外方法:

public void switchTab(int tab){
    tabHost.setCurrentTab(tab);
}

public void visibleTabs(){
    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);

}

public void invisibleTabs(){

    tabHost.getTabWidget().getChildAt(0).setVisibility(View.GONE);
    tabHost.getTabWidget().getChildAt(1).setVisibility(View.GONE);
    tabHost.getTabWidget().getChildAt(2).setVisibility(View.GONE);

}

标签活动:

public class LoginActivity extends Activity {



EditText txt_username;
EditText txt_password;


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



   setContentView(R.layout.login);


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

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


    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            String username = txt_username.getText().toString();
            String password = txt_password.getText().toString(); 

            switchTabInActivity(0);

        }
    });


}

public void switchTabInActivity(long indexTabToSwitchTo){

    waiter ParentActivity = (waiter) this.getParent();
    ParentActivity.visibleTabs();
    ParentActivity.switchTab(0);

}


}

LogCat如下:

04-12 19:37:49.825: ERROR/AndroidRuntime(2744): FATAL EXCEPTION: main

04-12 19:37:49.825: ERROR/AndroidRuntime(2744): java.lang.NullPointerException

04-12 19:37:49.825: ERROR/AndroidRuntime(2744):     at android.waiter.waiter.visibleTabs(waiter.java:130)

04-12 19:37:49.825: ERROR/AndroidRuntime(2744):     at android.waiter.LoginActivity.switchTabInActivity(LoginActivity.java:56)

04-12 19:37:49.825: ERROR/AndroidRuntime(2744):     at android.waiter.LoginActivity$1.onClick(LoginActivity.java:44)

很明显异常来自不可见/可见设置。

【问题讨论】:

  • 谢谢,你的问题对我帮助很大

标签: android tabs visibility switch-statement


【解决方案1】:

我不知道tabHost.getTabWidget().getChildAt(0) 是否是正确的做法。您是否尝试过为标签指定一个单独的 ID?

或者,如果您想尝试跟踪错误的确切位置,请抛出一堆断点并在调试模式下运行。

Button btn = (Button)this.findViewById(R.id.login_button); 我相信没有“this”也可以(虽然我可能是错的......但我从未在按钮声明中使用过this

【讨论】:

  • 感谢@Rasman 的帮助,我找到了问题所在!我只需要在 TabHost 的两个自定义方法中的 tabHost 中声明 tabHost。这解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多