0

Does anybody know how to hide a component from an inflated layout? I have the following code:

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);

and when I'm trying to hide it by using:

profile_tab_selected_indicator.setVisibility(View.GONE);

it doesn't work. It looks like I'm missing something or it's not possible to hide xml components from the inflated layouts. I've also tried to set the width and height to 0dp via the LayoutParams and it doesn't work as well.

In a custom function outside of the onCreate() like this:

public static View tabLayout;

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

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

Then I'm trying to hide it here:

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);
}

Here's the xml code of the inflated layout

<?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>

EDIT:

All the code responsible for my tab layout:

// 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;
    }
user
  • 86,916
  • 18
  • 197
  • 190
Andrei Stalbe
  • 1,511
  • 6
  • 26
  • 44

1 Answers1

0

You've done some things wrong in your code. I don't know why you choosed to make tabLayout a field in your class, but by doing this tabLayout will point to the last tab indictor that you set(the one for the STATISTICS tab). Because the tabLayout points to the last tab only, in the onTabChanged callback nothing will happen(because you don't do anything for the last tab).

I would advise you to change your onTabChanged method and search for the tab views directly with the getChildTabViewAt to make sure you're searching for that FrameLayout in the right place:

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

        }
    }
user
  • 86,916
  • 18
  • 197
  • 190