当前位置: 首页 > 知识库问答 >
问题:

带有动作栏、片段和视图寻呼机的Android GUI

田嘉澍
2023-03-14

你好

我已经做了很长时间的编程,但刚刚开始为android开发,至少可以说它和c有很大的不同。。。

无论如何,我正在尝试实现一个带有一些选项卡的gui,它应该能够在向左/向右滑动时更改选项卡。这些选项卡是通过actionbar(确切地说是ActionBarSherlock)实现的,即使用支持库中的ViewPager进行滑动。单个选项卡是片段(SherlockFragment:s)。在底部应该有某种状态栏,只是显示一些文本。

我遇到的问题是,标签从未显示。我看到actionbar位于顶部,带有徽标/标题,下面有一个选项卡列表。在屏幕的底部,我看到了状态栏文本,但没有其他内容。

如果我取消注释行//context.setContentView(pager);在SwipeBar()构造函数中,选项卡的内容会显示,但状态栏不会显示。(无论如何,这一行在这里感觉真的很不对劲,但我不知道如何在没有它的情况下在选项卡中获取一些内容。)

我想尽了一切办法。我已经阅读了所有我能找到的关于它的内容,并尝试了分配不同的例子来说明如何独立完成每个功能。但是把它们结合起来。。。我就是没法让它工作。我真的很感激你的帮助!

我的主要(活动)类:
Main.java

html" target="_blank">java prettyprint-override">public class Main extends SherlockFragmentActivity {
private SwipeBar    tabs;

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tabs = new SwipeBar(this, R.id.pager);
    tabs.add(One.class, "one", null);
    tabs.add(Two.class, "two", null);
    tabs.add(Three.class, "three", null);
}
}

这是我实现actionbar/viewpager/fragments:
SwipeBar的类。Java语言

public class SwipeBar extends FragmentPagerAdapter implements OnPageChangeListener,
    TabListener {
private final ActionBar                 bar;
private final SherlockFragmentActivity  ctx;
private final ViewPager                 pager;
private final ArrayList<TabInfo>        tabs;

public SwipeBar(final SherlockFragmentActivity context, final int viewPagerId) {
    super(context.getSupportFragmentManager());
    bar = context.getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    pager = new ViewPager(context);
    pager.setId(viewPagerId);
    pager.setAdapter(this);
    pager.setOnPageChangeListener(this);
    ctx = context;
    // context.setContentView(pager);
    tabs = new ArrayList<TabInfo>();
}

public void add(final Class<?> clss, final int tabHeaderStringId, final Bundle args) {
    final ActionBar.Tab tab = bar.newTab();
    final TabInfo info = new TabInfo(clss, args);
    tab.setTag(info);
    tab.setText(tabHeaderStringId);
    tab.setTabListener(this);
    tabs.add(info);
    bar.addTab(tab);
    notifyDataSetChanged();
}

@Override
public int getCount() {
    return tabs.size();
}

@Override
public Fragment getItem(final int pos) {
    final TabInfo info = tabs.get(pos);
    return Fragment.instantiate(ctx, info.clss().getName(), info.args());
}

public void onPageScrolled(final int arg0, final float arg1, final int arg2) {}

public void onPageScrollStateChanged(final int arg0) {}

public void onPageSelected(final int pos) {
    bar.setSelectedNavigationItem(pos);
}

public void onTabReselected(final Tab tab, final FragmentTransaction ft) {}

public void onTabSelected(final Tab tab, final FragmentTransaction ft) {
    final TabInfo tag = (TabInfo)tab.getTag();
    for(int i = 0; i < tabs.size(); i++)
        if(tabs.get(i) == tag) pager.setCurrentItem(i);
}

public void onTabUnselected(final Tab tab, final FragmentTransaction ft) {}
}

主要布局:
Main.xml

<LinearLayout 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"
android:orientation="vertical" >

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="0px">    
</android.support.v4.view.ViewPager>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="#33FF0000"
    android:gravity="center"
    android:layout_weight="0"
    android:text="statusbar">
</TextView> 

</LinearLayout>

以及三页的代码:
1/2/3。xml/java

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/one"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center" >
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="this is tab one" />
</LinearLayout>

public class One extends SherlockFragment {
@Override
public View onCreateView(final LayoutInflater inflater,
            final ViewGroup container, final Bundle savedInstanceState) {
    return (LinearLayout)inflater.inflate(R.layout.one, container, false);
}
}

共有1个答案

长孙兴德
2023-03-14

好的,我终于解决了。上面的代码来自于尝试将ViewPager功能添加到我所做的选项卡中。我重新开始并实现了一个常规的ViewPager(就像上面的各种例子一样),然后添加了一个ActionBar。实际的片段内容现在位于ViewPager中,ActionBar选项卡为空,但通过ViewPager回调进行设置以指示当前内容。

不过,我仍然不知道最初的尝试出了什么问题。。。

 类似资料:
  • 我的应用程序中有一个viewpager,它有7个片段,每个片段代表各自的逻辑 但是,有两个片段是相互耦合的,一个片段不能没有另一个片段而存在。 我有两个按钮,在屏幕底部的“上一个”和“下一个”,在片段之间切换。 我想使viewpager中的滑动无法到达其中一个耦合片段 现在我这样做:我把第一个片段(耦合的片段)放在位置0,第二个片段放在最后一个位置,这样当你左右滑动时,你就可以最后到达第二个耦合的

  • 我正在尝试使用PagerAdapter显示来自可绘制视图寻呼机的图像。为此,我编写了以下代码-- //调用PagerAdapter 下面是我的适配器类-- 下面是我的对话框 xml-- 下面是 ViewPager Item xml-- //下面是解释当前如何显示空的ViewPager的屏幕截图-- 当我调试应用程序时,一切似乎都很好,但不知道为什么图像没有显示在ViewPager中。请帮忙..

  • 所以我试着用可视寻呼机在屏幕间切换。我试着不使用碎片来做这件事,但是我不能让它工作。我在第59行得到一个错误,它是mview pager . setadapter(mCustomPagerAdapter);当我试图设置我的适配器时出现空指针异常。我在这里找到了一个例子。我想我在这个问题上有些力不从心,这是我第一次尝试使用可视寻呼机。 这是我的路由详细信息活动,我试图设置适配器 这是我的自定义页面适

  • 需要帮助在视图寻呼机中的片段之间传递数据!我们尝试将数据作为包传递到片段中。碎片内部。方法,并尝试从另一个片段获取数据。getArguments()。 活动代码 片段代码: 在片段之间传递数据时需要帮助

  • 我怎样才能在Android中获得类似这样的东西? 我已经用深度页面转换器实现了一个viewpager,但是我想不出在后面添加项目预览的方法。

  • 如何创建这样一个Android ViewPager?