gpt4 book ai didi

android - 在 ViewPager 内部设计一个 Horizo​​ntalScrollView 或者使用 fragments :

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:01 26 4
gpt4 key购买 nike

我需要设计如下画面,需要您的建议:

enter image description here

解释:

标题是静态/固定的,我不需要对它做任何事情。

黄色:这是有趣的部分,我需要设计一个类似 ViewPager 的屏幕,它能够向左/向右滚动最多 4 个屏幕。

红色:在每个屏幕中,如果不适合屏幕尺寸,我需要添加一个可以滚动的表格/网格。

绿色:可以使用屏幕底部的绿色按钮或滚动 ViewPager 来完成页面切换。

问题是:这个行为可以使用 ViewPager 实现还是应该使用 Fragments?如果 Fragment 是要走的路,那么我将如何使用滑动手势实现页面切换?如果它是 ViewPager 那么如何添加内部滚动以及如何使用底部的按钮控制它?

如有任何帮助,我们将不胜感激。

最佳答案

我认为这应该通过不可滑动 ViewPager 来解决。 View 分页器 底层 Fragment 无法响应滑动手势。在 ViewPager 中禁用滑动的重写方法是:

  1. onTouchEvent() - 返回 false
  2. onInterceptTouchEvent() - 返回 false

引用this SO question有关如何实现这一目标的更多信息。

接下来,您希望在每个寻呼机支架中使用 Fragment。所以我们正在构建以下布局:

在父 Activity 中,实例化了一个 FragmentPagerAdapter 并为您的选项卡添加了一个标签:

Activity 变化

@Override
protected void onCreate(final Bundle saveInstanceState) {
final FragmentPagerAdapter myTabAdapter = new MyFragmentPagerAdapter(
<Your ViewPager View>, <Your activity context, this>);
myTabAdapter.addTab(getActionBar().newTab(), "YOUR TAG", "Your Title");
// etc...
}

所以这给了我们上图的框架。一个托管 Activity ,包含一个 ViewPager 和底层选项卡。接下来是将 Fragment(包含您的表格)放入每个相应的选项卡中。这是由 FragmentPagerAdapter 实现处理的:

fragment 适配器( Activity 的内部类):

private class MyFragmentPagerAdapter extends FragmentPagerAdapter implements
ActionBar.TabListener, ViewPager.OnPageChangeListener {

/**
* Constructs a pager adapter to back a {@link ViewPager}.
*
* @param pager
* The {@link ViewPager} widget.
* @param activityContext
* The context the widget is being added under.
*/
public SpotMenuFragmentPagerAdapter(final ViewPager pager,
final Context activityContext) {
super(getFragmentManager());
pager.setAdapter(this);
this.context = activityContext;
}

/**
* Adds a tab to the hosting activity action bar.
*
* @param newTab
* The tab to add.
* @param tag
* The tab tag for id purposes.
* @param label
* The label of the tab displayed to the user.
*/
public void addTab(final ActionBar.Tab newTab, final String tag,
final String label) {
newTab.setTag(tag);
newTab.setText(label);
newTab.setTabListener(this);
getSupportActionBar().addTab(newTab);
}

/**
* This is where you do the work of building the correct fragment based
* on the tab currently selected.
*
* @see FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(final int position) {
final Tab tab = getActionBar().getTabAt(position);
if ("MY TAG".equals(tab.getTag().toString()) {
// instantiate the fragment (table) for "MY TAG"
} else {
// instantiate something else...
}
}

/**
* One fragment per tab.
*
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return getSupportActionBar().getTabCount();
}

/**
* @see ViewPager.OnPageChangeListener#onPageScrollStateChanged(int)
*/
@Override
public void onPageScrollStateChanged(final int arg0) {
// No-op.
}

/**
* @see ViewPager.OnPageChangeListener#onPageScrolled(int, float, int)
*/
@Override
public void onPageScrolled(final int arg0, final float arg1,
final int arg2) {
// No-op.
}

/**
* @see ViewPager.OnPageChangeListener#onPageSelected(int)
*/
@Override
public void onPageSelected(final int position) {
getSupportActionBar().setSelectedNavigationItem(position);
}

/**
* @see TabListener#onTabSelected(app.ActionBar.Tab,
* app.FragmentTransaction)
*/
@Override
public void onTabSelected(final Tab tab, final FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}

/**
* @see TabListener#onTabUnselected(ActionBar.Tab,
* app.FragmentTransaction)
*/
@Override
public void onTabUnselected(final Tab tab, final FragmentTransaction ft) {
// No-op.
}

/**
* @see TabListener#onTabReselected(ActionBar.Tab,app.FragmentTransaction)
*/
@Override
public void onTabReselected(final Tab tab, final FragmentTransaction ft) {
// No-op.
}
}

因此,希望此时我们有一个 Activity 托管“不可滑动”的 View 分页器,以及一种以标题下方(或根据屏幕尺寸而定)的选项卡栏形式切换选项卡的机制。从这一点来看,我确信您可以自定义以用一些导航箭头替换标签栏。

注意:很多内容都是凭内存写的,但希望我已经传达了要点,我会去哪里。

更新

针对更新后的问题:您可以将选项卡设置为任何旧 View 。设置 TabSpec因此。抱歉,我自己没有用过。

关于android - 在 ViewPager 内部设计一个 Horizo​​ntalScrollView 或者使用 fragments :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com