你好,我很難改變片段活動的可視化視圖。我創建了所有選項卡,但onClick我不知道如何將活動傳遞到該空白區域。Android如何與Fragment標籤進行交互
http://i40.tinypic.com/22bwxx.png
所以這個結構是一個簡單的活動名爲Main
剛剛設置的內容視圖的maintabholder.xml
文件保存它連接到一個名爲MainNav
其內容的視圖類的片段視圖包含所有標籤在底端。
maintabholder.xml
:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<include layout="@layout/header" android:layout_alignParentTop="true" android:id="@+id/headerArea"></include>
<fragment
class="my.package.name.MainNav"
android:id="@+id/fragment_tabs"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
MainNav.java code snippet
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
mRoot = inflater.inflate(R.layout.fragment_tabs, null);
mTabHost = (TabHost) mRoot.findViewById(android.R.id.tabhost);
setupTabs();
return mRoot;
}
和R.layout.fragment_tabs:
<?xml version="1.0" encoding="utf-8"?>
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#EFEFEF">
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_alignParentBottom="true"
android:layout_width="fill_parent"
android:background="@drawable/tab_background"
android:gravity="center_horizontal"
android:layout_height="wrap_content" >
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/tab_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/tab_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
</RelativeLayout>
和最後續活動的經濟需求,我想加載到片段(在按下按鈕TAB1)
public class HomeFragment extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
}
}
那就是幫助你得到的東西的要點,但在這裏發生在MainNav.java問題:
@Override
public void onTabChanged(String tabId) {
Log.d(TAG, "onTabChanged(): tabId=" + tabId);
if (TAB_HOME.equals(tabId)) {
updateTab(tabId, R.id.tab_1);
mCurrentTab = 0;
return;
}
}
點擊選項卡時,被登記在onTabChanged
活性,updateTab
函數被調用:
private void updateTab(String tabId, int placeholder) {
FragmentManager fm = getFragmentManager();
if (fm.findFragmentByTag(tabId) == null) {
//fm.beginTransaction()
// .replace(placeholder, /*need fragment object here*/ , tabId)
// .commit();
//
}
}
註釋掉replace
方法正在尋找一個(int, fragment, string)
,我想它應該改變我的空白空間。
但我不明白我從哪裏得到片段對象!這個幻象對象需要以某種方式包含我的HomeFragment
的xml佈局,並允許我與我爲HomeFragment
活動編碼的其他所有內容進行交互。
我的第一個預感是我的HomeFragment
活動需要extend FragmentActivity
而不是 只是活動。但這是我撞牆的地方。
有關兼容包方法的文檔很少,但TabActivity的文檔說不再使用TabActivity,所以我在這裏。針對Android 2.2+開發
Insight深表讚賞。
這非常有幫助!我有一件事是我的一個活動包含谷歌地圖。所以它必須擴展MapActivity。如果我將該活動更改爲FragmentActivity,那麼它會崩潰並顯示明顯的錯誤「mapview只能從MapActivity調用」,這對我和這個片段結構來說都是一個問題,除非我創建了某種混合的MapFragmentActivity ..... – CQM
考慮使用這個lib https://github.com/petedoyle/android-support-v4-googlemaps。雖然我沒有任何經驗,但它可能工作。 –
@ZsomborErdődy-Nagy - 你推薦支持庫,但是之後還聲明片段不能位於片段內,這不再是真的。支持庫用於解決某些問題,但自從發佈了v11之後,有一些嵌套的片段提供了一些特定的邏輯來支持它(getChildFragmentManager)。因此,對於發現此線程的其他人,活動可能不在片段中,但片段現在可能處於片段中。 – SandWyrm