单击时如何在android中显示标签为活动状态

时间:2016-02-23 09:41:02

标签: android tabs android-tabhost

我是Android的新手,并在我的应用程序中的tab上工作,我已经成功实现了应用程序中的选项卡,但我想点击一个标签,它是一个自定义tabhost,我的代码如下,我试过许多链接使得标签在Android中处于活动状态但不起作用,请帮我解决这个问题。

XML

<TabHost
        android1:id="@android:id/tabhost"
        android1:layout_width="match_parent"
        android1:layout_height="match_parent"
        android1:layout_alignParentBottom="true"
        android1:layout_alignParentLeft="true"
        android1:layout_alignParentRight="true"
        android1:layout_alignParentTop="true" >

        <RelativeLayout
            android1:id="@+id/RelativeLayout1"
            android1:layout_width="match_parent"
            android1:layout_height="wrap_content"
            android1:orientation="vertical" >

            <TabWidget
                android1:id="@android:id/tabs"
                android1:layout_width="match_parent"
                android1:layout_height="50dp"
                android1:layout_alignParentLeft="true"
                android1:layout_alignParentTop="true"
                android1:background="@color/app_color" >
            </TabWidget>
.
.
.

的java

TabHost mTabHost;

mTabHost = (TabHost)getActivity().findViewById(android.R.id.tabhost);
        mTabHost.setup();
        mTabHost.setOnTabChangedListener(this);

        setupTab(new TextView(getActivity()), "Popular");
        setupTab(new TextView(getActivity()), "Recent");

        mProgressBarLoading = (ProgressBar) getActivity().findViewById(com.company.stush.R.id.progressBarLoading);
       // mTextViewNoItems = (TextView) getActivity().findViewById(R.id.textViewNoItems);
       // mTextViewNoItems.setVisibility(View.GONE);

        mPopularAdapter = new PopularAdapter(getActivity());

        mGridViewPopular = (GridView) getActivity().findViewById(com.company.stush.R.id.gridViewPopular);
        mGridViewPopular.setEmptyView(mProgressBarLoading);
        mGridViewPopular.setAdapter(mPopularAdapter);
        mGridViewPopular.setOnItemClickListener(this);

        mGridViewRecent = (GridView) getActivity().findViewById(com.company.stush.R.id.gridViewRecent);
        mGridViewRecent.setEmptyView(mProgressBarLoading);
        mGridViewRecent.setOnItemClickListener(this);

        getLoaderManager().initLoader(0, null, this);
    }
     public void onResume () {

            super.onResume();
            getActivity().invalidateOptionsMenu();

getLoaderManager().destroyLoader(0);
         getLoaderManager().initLoader(0, null, this);

        }

    @Override
    public Loader<List<Post>> onCreateLoader(int id, Bundle args) {

        if (mTabHost.getCurrentTab() == 0) {
            //popular tab is clicked...
            mTabHost.setCurrentTab(0);
            mPopularLoader = new PopularLoader(getActivity(), PopularLoader.PopularOption.PopularOptionPopular);
        } else {
            mTabHost.setCurrentTab(1);
            //recent tab is clicked...
            mPopularLoader = new PopularLoader(getActivity(), PopularLoader.PopularOption.PopularOptionRecent);
        }
        return mPopularLoader;
    }

    @Override
    public void onLoadFinished(Loader<List<Post>> arg0, List<Post> data) {

        mPopularAdapter.setData(data);
        mPopularAdapter.notifyDataSetChanged();
        //mTextViewNoItems.setVisibility(View.INVISIBLE);
        mProgressBarLoading.setVisibility(View.INVISIBLE);
        //mGridViewPopular.setEmptyView(mTextViewNoItems);
        //mGridViewRecent.setEmptyView(mTextViewNoItems);
    }

    @Override
    public void onLoaderReset(Loader<List<Post>> arg0) {

        mPopularAdapter.setData(null);
    }

    @Override
    public void onTabChanged(String tabId) {

        getLoaderManager().destroyLoader(0);
        getLoaderManager().initLoader(0, null, this);
    }

    private void setupTab(final View view, final String tag) {

        View tabview = createTabView(mTabHost.getContext(), tag);

        TabSpec setContent = mTabHost.newTabSpec(tag).setIndicator(tabview).setContent(new TabContentFactory() {
            public View createTabContent(String tag) {return view;}
        });
        mTabHost.addTab(setContent);

    }

    private static View createTabView(final Context context, final String text) {

        View view = LayoutInflater.from(context).inflate(com.company.stush.R.layout.tabs_bg, null);
        TextView tv = (TextView) view.findViewById(com.company.stush.R.id.tabsText);
        tv.setText(text);
        return view;
    }

    @Override
    public void onItemClick (AdapterView<?> parent, View view, int position, long id) {

        Intent intentPostDetail = new Intent(getActivity(), PostDetailActivity.class);
        Post post = mPopularAdapter.getItem(position);
        intentPostDetail.putExtra("Post", post);
        startActivity(intentPostDetail);
    }

1 个答案:

答案 0 :(得分:0)

我已经按照我的方式解决了我的问题,根据建议我使用了一个选择器作为活动标签,如下所示。

<?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:gravity="center"
    android:background="@drawable/tab_bg_selector">
    <!--android:background="#00c3b0">-->

    <TextView android:id="@+id/tabsText" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"/>
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--  Active tab -->
    <item android:state_selected="true" android:state_focused="false"
        android:state_pressed="false" android:drawable="@color/active" />
    <!--  Inactive tab -->
    <item android:state_selected="false" android:state_focused="false"
        android:state_pressed="false" android:drawable="@color/dfault" />
    <!--  Pressed tab -->
    <item android:state_pressed="true" android:drawable="@android:color/transparent" />
    <!--  Selected tab (using d-pad) -->
    <item android:state_focused="true" android:state_selected="true"
        android:state_pressed="false" android:drawable="@android:color/transparent" />
</selector>
相关问题