Search code examples
androidandroid-tabhost

Tabs content in Android fragments?


I am currently setting content for my tabs like

TabSpec spec1=tabHost.newTabSpec("TAB 1");
spec1.setContent(R.id.tab1);
spec1.setIndicator("", ressources.getDrawable(R.drawable.image_large));

But how can set activity as its content for this

spec1.setContent(ProfileMenuAllTopics.this,MainActivity.class);

It says it is not applicable for this

edited: Can you help on this how to change it

public class ProfileMenuAllTopics extends Fragment {
    SessionManager session;
    JSONObject jsonobject,jsonobjectTwo;
    JSONArray jsonarray,jsonarrayTwo;
    ListView listview,listviewTwo;
    ListViewAdapter adapter,adapterTwo;
    ProgressDialog mProgressDialog;
    ArrayList<HashMap<String, String>> arraylist;
    ArrayList<HashMap<String, String>> arraylistTwo;
    static String TOPICID = "topicID";
    static String RANK = "topicName";
    static String COUNTRY = "topicPhone";
    static String TOPICPHONE = "topicPhone";
    static String POPULATION = "topicDesc";
    static String FLAG = "topicImage";
    static String TALKTIME = "balanceTalkTime";
    private static String KEY_SUCCESS = "success";
    RelativeLayout webViewHolderLayout,searchRelativeView,searchRelativeViewMyLists;
    String UserID;
    ImageView profile_btn;
    private View view;
    private TransparentProgressDialog pd;
    private Handler h;
    private Runnable r;
    String tabClicked;
    JSONObject whatAreYouLooking;
    JSONObject myTopicsList;
    Button load_more_btn;
    Button loadMoreMyTopics;
    int maxRecordsHere = 10;
    int maxMyRecordsHere = 10;
        TabHost tabHost;
        @TargetApi(Build.VERSION_CODES.GINGERBREAD)
        @SuppressLint("NewApi,SetJavaScriptEnabled")
        @SuppressWarnings("deprecation")
        @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
            if (android.os.Build.VERSION.SDK_INT > 9) {
                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                StrictMode.setThreadPolicy(policy);
                }

        view = inflater.inflate(R.layout.profile_menu_topics_list, null);
        h = new Handler();
        pd = new TransparentProgressDialog(inflater.getContext(), R.drawable.myspinner);
        r =new Runnable() {
            @Override
            public void run() {
                if (pd.isShowing()) {
                    pd.dismiss();
                }
            }
        };
        session = new SessionManager(inflater.getContext());
        session.checkLogin();
        HashMap<String, String> user = session.getUserDetails();
        UserID = user.get(SessionManager.KEY_USER_ID);
        Resources ressources = getResources(); 
        load_more_btn = (Button) view.findViewById(R.id.loadMoreTopics);
        loadMoreMyTopics = (Button) view.findViewById(R.id.loadMoreMyTopics);
        tabHost=(TabHost)view.findViewById(R.id.tabHost);
        webViewHolderLayout = (RelativeLayout) view.findViewById(R.id.webViewHolder);
        searchRelativeView = (RelativeLayout) view.findViewById(R.id.searchRelativeView);
        searchRelativeViewMyLists = (RelativeLayout) view.findViewById(R.id.searchRelativeViewMyLists);     
        Bundle args = getArguments();
        tabHost.setup();

        TabSpec spec1=tabHost.newTabSpec("TAB 1");
        spec1.setContent(R.id.tab1);
        spec1.setIndicator("", ressources.getDrawable(R.drawable.topics_image_large));

        TabSpec spec2=tabHost.newTabSpec("TAB 2");
        spec2.setIndicator("", ressources.getDrawable(R.drawable.my_calls_large));
        spec2.setContent(R.id.tab2);


        TabSpec spec3=tabHost.newTabSpec("TAB 3");
        spec3.setContent(R.id.tab3);
        spec3.setIndicator("", ressources.getDrawable(R.drawable.how_it_works_large));
        tabHost.addTab(spec1);
        tabHost.addTab(spec2);
        tabHost.addTab(spec3);

        for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
        {
                tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#2AC4EA"));
        }



        tabHost.getTabWidget().setCurrentTab(0);
        tabHost.getTabWidget().getChildAt(0).setBackgroundColor(Color.parseColor("#FFFFFF"));

        whatAreYouLookingFor();
        myTopicsTab();


        tabHost.setOnTabChangedListener(new OnTabChangeListener() {
            @Override
           public void onTabChanged(String arg0) {
                for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
                {
                    tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#2AC4EA"));
                }

                tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()).setBackgroundColor(Color.parseColor("#FFFFFF"));

                int selectTabHere = tabHost.getCurrentTab();
                if(selectTabHere==0){
                    pd.show();
                    tabValueZero();
                    h.postDelayed(r,5000);
                }else if(selectTabHere==1){
                    pd.show();
                    tabValueOne();
                    h.postDelayed(r,5000);
                }else if(selectTabHere==2){
                    pd.show();
                    tabValueTwo();
                    h.postDelayed(r,5000);
                }
           }     
       });  


        load_more_btn.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                  pd.show(); 
                  maxRecordsHere = maxRecordsHere + 10; 
                  getPaging(whatAreYouLooking,maxRecordsHere);
                  h.postDelayed(r,5000);
               }
        });

        loadMoreMyTopics.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                  pd.show(); 
                  maxMyRecordsHere = maxMyRecordsHere + 10; 
                  getPagingMyTopics(whatAreYouLooking,maxRecordsHere);
                  h.postDelayed(r,5000);
               }
        });
        tabValueZero();
        return view;
    }

        private void whatAreYouLookingFor(){
            UserFunctions userFunction = new UserFunctions(); 
            whatAreYouLooking = userFunction.getTopicsList();
            getPaging(whatAreYouLooking,maxRecordsHere);
        }

        private void myTopicsTab(){
            UserFunctions userFunction = new UserFunctions(); 
            myTopicsList = userFunction.getMyTabTopicsList(UserID);
            getPagingMyTopics(myTopicsList,maxMyRecordsHere);
        }

        public void getPaging(JSONObject whatAreYouLooking,int maxRecords){
            arraylist = new ArrayList<HashMap<String, String>>();
            try {
                if (whatAreYouLooking.getString(KEY_SUCCESS) != null) {
                    String search_res = whatAreYouLooking.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(search_res) == 1){
                        jsonarray = whatAreYouLooking.getJSONArray("result");
                        JSONArray jsonWhatAreYouLookingArray = new JSONArray(whatAreYouLooking.optString("result"));
                        int totalTopics = jsonWhatAreYouLookingArray.length();
                        if(totalTopics<=maxRecords){
                            load_more_btn.setVisibility(View.GONE);
                        }
                        for (int w = 0; w < maxRecords; w++) {
                            HashMap<String, String> map = new HashMap<String, String>(); 
                            JSONObject jsonLookingObject = jsonWhatAreYouLookingArray.getJSONObject(w);
                            map.put("topicID", jsonLookingObject.getString("topicID"));
                            map.put("Name", jsonLookingObject.getString("Name"));
                            map.put("Phone",jsonLookingObject.getString("Phone"));
                            arraylist.add(map);
                            listview = (ListView) view.findViewById(R.id.listview);
                            adapter = new ListViewAdapter(this.getActivity(), arraylist);
                            listview.setAdapter(adapter);
                        }
                    }else{

                    }
                }else{

                }
            } catch (JSONException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
        }


        public void getPagingMyTopics(JSONObject myTopicsList,int maxMyRecordsHere){
            arraylistTwo = new ArrayList<HashMap<String, String>>();
            try {
                if (myTopicsList.getString(KEY_SUCCESS) != null) {
                    String search_res_Two = myTopicsList.getString(KEY_SUCCESS); 
                    if(Integer.parseInt(search_res_Two) == 1){
                        jsonarrayTwo = myTopicsList.getJSONArray("result");
                        JSONArray jsonWhatAreYouLookingArrayTwo = new JSONArray(myTopicsList.optString("result"));
                        int totalTopics = jsonWhatAreYouLookingArrayTwo.length();
                        if(totalTopics<=maxMyRecordsHere){
                            loadMoreMyTopics.setVisibility(View.GONE);
                        }
                        for (int w = 0; w < maxMyRecordsHere; w++) {
                            HashMap<String, String> mapTwo = new HashMap<String, String>(); 
                            JSONObject jsonLookingObjectTwo = jsonWhatAreYouLookingArrayTwo.getJSONObject(w);
                            mapTwo.put("topicID", jsonLookingObjectTwo.getString("topicID"));
                            mapTwo.put("Name", jsonLookingObjectTwo.getString("Name"));
                            mapTwo.put("Phone",jsonLookingObjectTwo.getString("Phone"));
                            arraylistTwo.add(mapTwo);
                            listviewTwo = (ListView) view.findViewById(R.id.listviewTwo);
                            adapterTwo = new ListViewAdapter(this.getActivity(), arraylistTwo);
                            listviewTwo.setAdapter(adapterTwo);
                        }
                    }else{

                    }
                }else{

                }
            } catch (JSONException e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
        }

        private void setWebViewHowItworks(){
            WebView wv;  
            wv = (WebView) view.findViewById(R.id.webView1);  
            wv.setBackgroundColor(0);
            wv.setBackgroundResource(android.R.color.black);
            wv.setWebChromeClient(new WebChromeClient());
            wv.setWebViewClient(new WebViewClient());
            wv.getSettings().setJavaScriptEnabled(true);
            wv.getSettings().setPluginsEnabled(true);
            wv.getSettings().setUseWideViewPort(true);
            wv.getSettings().setLoadWithOverviewMode(true);
            wv.addJavascriptInterface(this, "webConnector");
            wv.addJavascriptInterface(this, "toaster");
            wv.clearView();
            wv.loadUrl("www.google.com");
            wv.requestLayout();
        }

        private class TransparentProgressDialog extends Dialog {

            private ImageView iv;

            public TransparentProgressDialog(Context context, int resourceIdOfImage) {
                super(context, R.style.TransparentProgressDialog);
                WindowManager.LayoutParams wlmp = getWindow().getAttributes();
                wlmp.gravity = Gravity.CENTER_HORIZONTAL;
                getWindow().setAttributes(wlmp);
                setTitle(null);
                setCancelable(false);
                setOnCancelListener(null);
                LinearLayout layout = new LinearLayout(context);
                layout.setOrientation(LinearLayout.VERTICAL);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
                iv = new ImageView(context);
                iv.setImageResource(resourceIdOfImage);
                layout.addView(iv, params);
                addContentView(layout, params);
            }

            @Override
            public void show() {
                super.show();
                RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f);
                anim.setInterpolator(new LinearInterpolator());
                anim.setRepeatCount(Animation.INFINITE);
                anim.setDuration(3000);
                iv.setAnimation(anim);
                iv.startAnimation(anim);
            }
        }

        public void tabValueZero(){
            searchRelativeView.setVisibility(View.VISIBLE);
            searchRelativeViewMyLists.setVisibility(View.GONE);
            webViewHolderLayout.setVisibility(View.GONE);
        }

        public void tabValueOne(){
            searchRelativeView.setVisibility(View.GONE);
            searchRelativeViewMyLists.setVisibility(View.VISIBLE);
            webViewHolderLayout.setVisibility(View.GONE);
        }

        public void tabValueTwo(){
            searchRelativeView.setVisibility(View.GONE);
            searchRelativeViewMyLists.setVisibility(View.GONE);
            webViewHolderLayout.setVisibility(View.VISIBLE);
            setWebViewHowItworks();
        }
}

Solution

  • below is edited code where I have given one sample to include Activity inside Fragment Tabs. Please let me know in case you couldn't understand anything:

    //FragmentActivity having tabs
    package com.example.tabhost;
    
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.view.ViewPager;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.TabHost;
    import android.widget.TextView;
    
    public class MainActivity extends FragmentActivity {
    
        Context mContext;
        Intent mIntent;
    
        TabHost mTabHost;
        ViewPager mViewPager;
        TabsAdapterActivity mTabsAdapter;
    
        //Setup tab
        private void setupTabHost() { 
            mTabHost = (TabHost) findViewById(android.R.id.tabhost);
            mTabHost.setup();
    
            mViewPager = (ViewPager) findViewById(R.id.pager);
            mTabsAdapter = new TabsAdapterActivity(this, mTabHost, mViewPager);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mContext = MainActivity.this;
    
            setupTabHost();
    
            addTab(R.string.mycards,"My Cards Category", MyCardsActivity.class); //My Cards
            addTab(R.string.yourcards,"Your Cards Category", YourCardsActivity.class); //Shared Cards
    
        }
    
        //Add tab
        private void addTab(int headingTextId, String tabSpec, Class<?> fragmentclass){
    
            LayoutInflater inflater_mycard = getLayoutInflater();
            View view = inflater_mycard.inflate(R.layout.tab_style, null);
            TextView tab_heading = (TextView) view.findViewById(R.id.tab_heading);
    
            tab_heading.setText(getResources().getString(headingTextId));
            mTabsAdapter.addTab(mTabHost.newTabSpec(tabSpec).setIndicator(view), fragmentclass, null);
        }
    
    
    
    }
    //TabsAdapter designed to include Activity
    package com.example.tabhost;
    
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.Rect;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TabHost;
    import android.widget.TabWidget;
    
    import java.util.ArrayList;
    
    import com.example.tabhost.TabsAdapterFragment.DummyTabFactory;
    import com.example.tabhost.TabsAdapterFragment.TabInfo;
    
    /**
    * This is a helper class that implements the management of tabs and all
    * details of connecting a ViewPager with associated TabHost. It relies on a
    * trick. Normally a tab host has a simple API for supplying a View or
    * Intent that each tab will show. This is not sufficient for switching
    * between pages. So instead we make the content part of the tab host
    * 0dp high (it is not shown) and the TabsAdapter supplies its own dummy
    * view to show as the tab content. It listens to changes in tabs, and takes
    * care of switch to the correct paged in the ViewPager whenever the selected
    * tab changes.
    */
    public class TabsAdapterActivity extends PagerAdapter
            implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
        private final Context mContext;
        private final TabHost mTabHost;
        private final ViewPager mViewPager;
        private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
        private final Rect mTempRect = new Rect();
        private TabHost.OnTabChangeListener mOnTabChangeListener;
    
        static final class TabInfo {
            public final String tag;
            private final Class<?> clss;
            private final Bundle args;
    
            TabInfo(String _tag, Class<?> _class, Bundle _args) {
                tag = _tag;
                clss = _class;
                args = _args;
            }
        }
    
        static class DummyTabFactory implements TabHost.TabContentFactory {
            private final Context mContext;
    
            public DummyTabFactory(Context context) {
                mContext = context;
            }
    
            @Override
            public View createTabContent(String tag) {
                View v = new View(mContext);
                v.setMinimumWidth(0);
                v.setMinimumHeight(0);
                return v;
            }
        }
    
        public TabsAdapterActivity(Activity activity, TabHost tabHost, ViewPager pager) {
            mContext = activity;
            mTabHost = tabHost;
            mViewPager = pager;
            mTabHost.setOnTabChangedListener(this);
            mViewPager.setAdapter(this);
            mViewPager.setOnPageChangeListener(this);
        }
    
        public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) {
            tabSpec.setContent(new DummyTabFactory(mContext));
            String tag = tabSpec.getTag();
    
            TabInfo info = new TabInfo(tag, clss, args);
            mTabs.add(info);
            mTabHost.addTab(tabSpec);
            notifyDataSetChanged();
        }
    
        @Override
        public int getCount() {
            return mTabs.size();
        }
    
        @Override
        public Class<? extends TabInfo> instantiateItem(ViewGroup container, int position) {
            /*View view = mTabs.get(position).view;
            container.addView(view);
            return view;*/
            return mTabs.get(position).getClass();
    
    
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);
        }
    
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }
    
        public void setOnTabChangedListener(TabHost.OnTabChangeListener listener) {
            mOnTabChangeListener = listener;
        }
    
        @Override
        public void onTabChanged(String tabId) {
            int position = mTabHost.getCurrentTab();
            mViewPager.setCurrentItem(position);
            if (mOnTabChangeListener != null) {
                mOnTabChangeListener.onTabChanged(tabId);
            }
        }
    
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }
    
        @Override
        public void onPageSelected(int position) {
            // Unfortunately when TabHost changes the current tab, it kindly
            // also takes care of putting focus on it when not in touch mode.
            // The jerk.
            // This hack tries to prevent this from pulling focus out of our
            // ViewPager.
            TabWidget widget = mTabHost.getTabWidget();
            int oldFocusability = widget.getDescendantFocusability();
            widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
            mTabHost.setCurrentTab(position);
            widget.setDescendantFocusability(oldFocusability);
    
            // Scroll the current tab into visibility if needed.
            View tab = widget.getChildTabViewAt(position);
            mTempRect.set(tab.getLeft(), tab.getTop(), tab.getRight(), tab.getBottom());
            widget.requestRectangleOnScreen(mTempRect, false);
    
            // Make sure the scrollbars are visible for a moment after selection
            /*final View contentView = mTabs.get(position).view;
            if (contentView instanceof CaffeinatedScrollView) {
                ((CaffeinatedScrollView) contentView).awakenScrollBars();
            }*/
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
        }
    }
    //-------Supporting XML layouts & drawables-----------
    // tab_style.xml place inside layout
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tabsLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/tab_bg_selector"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="10dip" >
    
        <TextView
            android:id="@+id/tab_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@drawable/tab_text_selector"
            android:textSize="15sp" />
    
    </LinearLayout>
    //place below in drawable folder
    //tab_bg_selected.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tabsLayout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/tab_bg_selector"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="10dip" >
    
        <TextView
            android:id="@+id/tab_heading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@drawable/tab_text_selector"
            android:textSize="15sp" />
    
    </LinearLayout>
    //tab_bg_selector.xml
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >
    
        <gradient
            android:angle="-90"
            android:centerColor="#2A85C4"
            android:endColor="#1B73AD"
            android:startColor="#1B73AD" />
    
    </shape>
    //tab_bg_unselected.xml
    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle" >
    
        <gradient
            android:angle="-90"
            android:centerColor="#424242"
            android:endColor="#5C5C5C"
            android:startColor="#5C5C5C" />
    
    </shape>
    //tab_bg_selector.xml
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_selected="true" android:color="@android:color/white"/>
        <item android:state_focused="true" android:color="@android:color/white"/>
        <item android:state_pressed="true" android:color="@android:color/white"/>
        <item android:color="#f8f8f8"/>
    
    </selector>