选中Android片段中的内容?

时间:2014-01-30 16:22:16

标签: android android-tabhost

我目前正在为我的标签设置内容,例如

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

但是如何将活动设置为此

的内容
spec1.setContent(ProfileMenuAllTopics.this,MainActivity.class);

它说它不适用于此

编辑: 你能帮忙解决这个问题吗

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

1 个答案:

答案 0 :(得分:1)

下面的

是编辑过的代码,我在其中给出了一个样本,包括片段选项卡中的Activity。如果您无法理解,请告诉我们:

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