0

有人知道如何从膨胀的布局中隐藏组件吗?我有以下代码:

View tabLayout = LayoutInflater.from(this).inflate(R.layout.tab_layout, null);
FrameLayout profile_tab_selected_indicator =
      (FrameLayout)tabLayout.findViewById(R.id.profile_tab_selected_indicator);

当我试图通过使用隐藏它时:

profile_tab_selected_indicator.setVisibility(View.GONE);

它不起作用。看起来我遗漏了一些东西,或者无法从膨胀的布局中隐藏 xml 组件。我也尝试通过设置宽度和高度,0dpLayoutParams效果不佳。

在这样的自定义函数之外onCreate()

public static View tabLayout;

protected void onCreate(){
   //some code here
buildTabLayout();
}

public void buildTabLayout(){
   tabLayout = LayoutInflater.from(this).inflate(R.layout.tab_layout,   null);
}

然后我试图在这里隐藏它:

public void onTabChanged(String tabId) {
    FrameLayout profile_tab_selected_indicator = (FrameLayout)tabLayout.findViewById(R.id.profile_tab_selected_indicator);

    profile_tab_selected_indicator.setVisibility(View.GONE);
}

这是膨胀布局的xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/profile_tab_bar_bg"
    android:gravity="center"
    android:orientation="vertical" >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/profile_top_bar_shadow_xml" >
    </FrameLayout>

    <ImageView
        android:id="@+id/iv_tabIcon"
        android:layout_width="30dp"
        android:layout_height="30dp" />

    <TextView
        android:id="@+id/tv_tabTitle"
        style="@style/ProfileTabLabelsStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@drawable/profile_tab_label_selector" />

    <FrameLayout
        android:id="@+id/profile_tab_selected_indicator"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/ProfileTabSelected" >
    </FrameLayout>

</LinearLayout>

编辑:

负责我的选项卡布局的所有代码:

// tabs labels
    public static String[] tabsTitles = new String[] { "PROFILE", "CAMPAIGNS",
            "STATISTICS" };

    public static View tabLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.vw_profile);

        // initializing xml components
        init();

        // Tab Layut builder
        buildTabLayout();


    }
private void buildTabLayout() {
        // TODO Auto-generated method stub
        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost(); // The activity TabHost
        tabHost.setOnTabChangedListener(this);
        TabHost.TabSpec spec; // Resusable TabSpec for each tab
        View tabLayout; // tabLayout
        Intent intent; // Reusable Intent for each tab

        // PROFILE TAB
        tabLayout = createTabLayout(this, tabsTitles[0]);
        intent = new Intent().setClass(this, VieweedsProfileTabActivity.class);
        spec = tabHost.newTabSpec(tabsTitles[0]).setIndicator(tabLayout)
                .setContent(intent);
        tabHost.addTab(spec);

        // CAMPAIGNS TAB
        tabLayout = createTabLayout(this, tabsTitles[1]);
        intent = new Intent()
                .setClass(this, VieweedsCampaignsTabActivity.class);
        spec = tabHost.newTabSpec(tabsTitles[1]).setIndicator(tabLayout)
                .setContent(intent);
        tabHost.addTab(spec);

        // STATISTICS TAB
        tabLayout = createTabLayout(this, tabsTitles[2]);
        intent = new Intent().setClass(this,
                VieweedsStatisticsTabActivity.class);
        spec = tabHost.newTabSpec(tabsTitles[2]).setIndicator(tabLayout)
                .setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);

    }

    public void onTabChanged(String tabId) {
        // TODO Auto-generated method stub
        FrameLayout profile_tab_selected_indicator = (FrameLayout)tabLayout.findViewById(R.id.profile_tab_selected_indicator);
        FrameLayout campaigns_tab_selected_indicator = (FrameLayout)tabLayout.findViewById(R.id.campaigns_tab_selected_indicator);

        if (tabId.equals(tabsTitles[0])) {
            // profile tab
            Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
            profile_tab_selected_indicator.setVisibility(View.VISIBLE);
            campaigns_tab_selected_indicator.setVisibility(View.GONE);
        } else if (tabId.equals(tabsTitles[1])) {
            // campaigns tab
            Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
            profile_tab_selected_indicator.setVisibility(View.GONE);
            campaigns_tab_selected_indicator.setVisibility(View.VISIBLE);
        } else {
            Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
            // statistics tab

        }
    }

    // creating tab layout for each tab
    public static View createTabLayout(Context c, String tabTitleText){
        tabLayout = LayoutInflater.from(c).inflate(R.layout.tab_layout, null);
        TextView tabTitle = (TextView)tabLayout.findViewById(R.id.tv_tabTitle);
        tabTitle.setTypeface(arial);
        ImageView tabIcon = (ImageView)tabLayout.findViewById(R.id.iv_tabIcon);
        tabTitle.setText(tabTitleText);

        //assigning tab icons for each tab
        if(tabTitleText.equals(tabsTitles[0])){
            //profile tab
            tabIcon.setImageResource(R.drawable.profile_tab_bar_profile_tab_icon);
        }else if(tabTitleText.equals(tabsTitles[1])){
            //campaigns tab
            tabIcon.setImageResource(R.drawable.profile_tab_bar_campaigns_tab_icon);
        }else{
            //statistics tab
            tabIcon.setImageResource(R.drawable.profile_tab_bar_statistics_tab_icon);
        }

        return tabLayout;
    }
4

1 回答 1

0

您在代码中做错了一些事情。我不知道您为什么选择tabLayout在课堂上创建一个字段,但这样做tabLayout会指向您设置的最后一个选项卡指示符(用于STATISTICS选项卡的那个)。因为tabLayout仅指向最后一个选项卡,所以在onTabChanged回调中不会发生任何事情(因为您没有为最后一个选项卡做任何事情)。

我建议您更改onTabChanged方法并直接使用 搜索选项卡视图,getChildTabViewAt以确保您在FrameLayout正确的位置进行搜索:

public void onTabChanged(String tabId) {
        // the first tab view
        View tab1 = getTabWidget().getChildTabViewAt(0);
        FrameLayout profile_tab_selected_indicator = (FrameLayout)tab1.findViewById(R.id.profile_tab_selected_indicator);
        // the second tab view
        View tab2 = getTabWidget().getChildTabViewAt(1);
        // where does this come from?!?! it is in the second tab?!?!
        FrameLayout campaigns_tab_selected_indicator = (FrameLayout)tab2.findViewById(R.id.campaigns_tab_selected_indicator);  
        // the third tab view
        View tab3 = getTabWidget().getChildTabViewAt(2);            

        if (tabId.equals(tabsTitles[0])) {
            // profile tab
           Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();                     
           profile_tab_selected_indicator.setVisibility(View.VISIBLE);
           campaigns_tab_selected_indicator.setVisibility(View.GONE);
        } else if (tabId.equals(tabsTitles[1])) {
            // campaigns tab
            Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
            profile_tab_selected_indicator.setVisibility(View.GONE);
            campaigns_tab_selected_indicator.setVisibility(View.VISIBLE);
        } else {
            Toast.makeText(this, tabId, Toast.LENGTH_LONG).show();
            // statistics tab

        }
    }
于 2012-06-14T14:42:34.600 回答