我是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);
}
答案 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>