我创建了一个屏幕,其上有一些只读数据字段,底部有一组horizontal
tabs
。
每个标签都有fragment
代表tab content
,并由一组数据对象备份,例如其中一个标签是以前的地址,其中可以有0到多个。
我希望tab
内容fragment
为swipeable
,以便它最初显示最近的上一个地址,swipe
将left
最初从an array
拉入下一个,如果合适,继续滑动将在任一方向上浏览地址。
我一直在寻找FragmentPageAdapter
,但我不想要title bar
中的任何内容,我也想对每个fragment
使用相同的swipe
作为唯一改变的内容是显示的数据,layout
每次都是相同的。
我仍然希望swipe
操作使其看起来像是从一个页面滑到另一个页面的页面。
这是最好的前进方式吗?有更好的选择吗?目前有5个tabs
,其中3个tabs
会有swipe-able
个内容,这些内容会显示更多数据,但视图本身不会发生变化。
我以为我会编辑它并添加一些代码,这样可能更容易看到我想要实现的目标:
我有一个片段,它会复制一个被单击的垂直制表符,并且该片段内部是一组水平制表符:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_marginTop="5dp">
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1"
android:id="@+id/name_table">
</TableLayout>
</LinearLayout>
<android.support.v4.app.FragmentTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:layout_marginTop="5dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="20">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:orientation="horizontal">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/tab_btn_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/temp_addr_tab_btn"
android:text="Temporary Addresses"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/postal_addr_tab_btn"
android:text="Postal Addresses"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/home_addr_tab_btn"
android:text="Home Addresses"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/tel_fax_tab_btn"
android:text="Telephone / Fax"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/email_other_tab_btn"
android:text="Email / Other"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
</LinearLayout>
</FrameLayout>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_weight="17"
android:background="@color/white"/>
</LinearLayout>
</android.support.v4.app.FragmentTabHost>
因此,当用户点击第一个标签页或刚刚呈现的页面时,它将在android中显示另一个片段:id =“@ android:id / tabcontent”。
这样可以显示我的临时地址片段:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.android.mockattempt1.TemporaryAddressesFragment">
<TextView android:layout_width="match_parent" android:layout_height="match_parent"
android:text="Temp Addresses Fragment that will show address information soon" />
目前,临时地址片段只是一个硬编码的文本视图,但我希望这是一组可刷卡的临时地址片段,用户可以通过该片段轻扫以查看地址。
我正在尝试将这个教程http://www.101apps.co.za/articles/swipe-view-tutorial.html放到我的应用程序中,但我不确定ViewPager xml应该去哪里,它几乎看起来应该是父片段中的tabcontent xml?
我不认为这是正确的,因为在父片段中,标签内容的设置如下:
mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);
mTabHost.addTab(mTabHost.newTabSpec("temp_addresses").setIndicator("Temporary Addresses"), TemporaryAddressesFragment.class, null);
mTabHost.setCurrentTab(0);
我几乎需要用页面适配器功能替换它或以某种方式让它们一起工作但我不知道如何做到这一点。
答案 0 :(得分:0)
我已设法做到这一点,但并不完全确定它是最好的方法,但我会详细说明我的尝试:
为第一个标签内容显示水平标签的片段,以前的地址(fragment_record.xml):
<android.support.v4.app.FragmentTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:layout_marginTop="5dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="20">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:orientation="horizontal">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>
<LinearLayout
android:id="@+id/tab_btn_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/temp_addr_tab_btn"
android:text="Temporary Addresses"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/postal_addr_tab_btn"
android:text="Postal Addresses"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/home_addr_tab_btn"
android:text="Home Addresses"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/tel_fax_tab_btn"
android:text="Telephone / Fax"
android:layout_marginRight="1dp"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
<Button
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_weight="1.0"
android:background="@color/lightest_grey"
android:id="@+id/email_other_tab_btn"
android:text="Email / Other"
android:textSize="7sp"
android:gravity="bottom|center"
android:drawableTop="@mipmap/ic_launcher"
android:paddingTop="4dp"
/>
</LinearLayout>
</FrameLayout>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_weight="17"
android:background="@color/white"/>
</LinearLayout>
</android.support.v4.app.FragmentTabHost>
设置选项卡和下面详述的临时地址片段的意图(RecordFragment.java):
mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);
mTabHost.addTab(mTabHost.newTabSpec("temp_addresses").setIndicator("Temporary Addresses"), TemporaryAddressesFragment.class, null);
mTabHost.setCurrentTab(0);
ViewPager的占位符片段(fragment_temporary_addresses.xml):
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/temp_addr_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</android.support.v4.view.ViewPager>
表示上述片段的类,还包含内部类(TemporaryAddressesFragment.java):
private ViewPager temporaryAddressViewPager;
private TemporaryAddressDetailFragmentStatePageAdapter temporaryAddressStateAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = (View)inflater.inflate(R.layout.fragment_temporary_addresses, container, false);
temporaryAddressStateAdapter = new TemporaryAddressDetailFragmentStatePageAdapter(getFragmentManager());
temporaryAddressViewPager = (ViewPager)rootView.findViewById(R.id.temp_addr_pager);
temporaryAddressViewPager.setAdapter(temporaryAddressStateAdapter);
return rootView;
}
此片段类中包含的内部类是适配器,它目前只提供3个硬编码的临时地址详细信息片段:
public class TemporaryAddressDetailFragmentStatePageAdapter extends FragmentStatePagerAdapter {
public TemporaryAddressDetailFragmentStatePageAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public int getCount() {
return 3;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
fragment = new TemporaryAddressDetailFragment();
return fragment;
}
}
}
另一个代表我想要刷卡的实际内容\详细信息的片段(fragment_temporary_address_detail.xml):
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.android.oxygenmockattempt1.TemporaryAddressDetailFragment">
<!-- TODO: Update blank fragment layout -->
<TextView android:layout_width="match_parent" android:layout_height="match_parent"
android:text="This is the temporary address detail fragment screen" />
还有一个类代表上面的片段(TemporaryAddressDetailFragment.java),它当前没有做任何事情,因为片段xml显示了一个硬编码的字符串。
我还在我的实际活动类(MainActivity.java)中实现了以下inerface:
TemporaryAddressesFragment.OnFragmentInteractionListener, TemporaryAddressDetailFragment.OnFragmentInteractionListener
所以现在当我的片段上显示第一个标签时,我有3个可以刷卡的地址窗格,但这并不会以任何方式滑动标签。
答案 1 :(得分:-1)