Здравствуйте. У меня проблемы с изменением визуального представления активности фрагмента. Я создал все вкладки, но при нажатии я не знаю, как передать действие в это пустое пространство.
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)
, и я полагаю, что он должен изменить пробел для меня.
но я не понимаю, откуда взять фрагмент объекта! Этот фантомный объект должен как-то содержать xml-макет моего HomeFragment
и позволять мне взаимодействовать со всем остальным, что я кодировал для действия HomeFragment
.
Моя первая догадка, что моя HomeFragment
активность должна вместо extend FragmentActivity
просто активность. Но это где я бью стену.
Существует очень мало документации по методам пакета совместимости, но в документации для TabActivity сказано, что больше не следует использовать TabActivity, поэтому я здесь. Разработка для Android 2.2 +
Проницательность приветствуется.