通过片段水平滚动,也可以通过按钮访问片段?

时间:2012-11-21 09:57:25

标签: android button onclick android-fragments

我一直绞尽脑汁没有解决方案。解释我想要的最简单的方法是在这个png我画了:http://i.imgur.com/42XLi.png

所以我有4个TextView&第一个屏幕上的ImageViews,如果你要刷它们,我希望能够将我带到具有相同动画效果的其他屏幕。有很多应用程序可以做到这一点但我实际上无法找到如何自己实现它。显然,我必须先使用OnClickListener使我的ImageViews和TextViews可以点击。我在那里做什么呢?

我已经使用Fragments设置了水平滚动,但是最后一块拼图是我正在努力的东西。我想让用户可以选择如何浏览我的应用程序,有些人可以点击ImageViews / TextViews来为他们进行滑动,或者有些人可以向右滑动以获取其他片段。

希望我已经正确解释了这一点。实际上Play商店做了我想要的事情,除了它用标签(从顶部免费到顶级付费等)。这是我不想使用的东西(制表符)。我希望我可以通过在TextViews&上设置的onClicks来复制它。 ImageViews。

我真的很感激任何帮助!我已经使用支持库完成了这项工作,所以如果它有所不同,它不仅仅是3.0+。

编辑:实际上,在进行一些研究时,我遇到了一种叫做“FragmentTransaction”的东西。这是完成所有这些的正确方法吗?刚刚碰到它,所以我不太了解它。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是ViewPager。我做了一些示例,向您展示如何做出理想的行为:

private class MyAdapter extends FragmentPagerAdapter {

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return StarterFragment.newInstance(R.id.viewPagerIdFromTheLayout);
        } else {
            return NormalFragment.newInstance(position);
        }
    }

    @Override
    public int getCount() {
        return 5;
    }

}

public static class StarterFragment extends ListFragment {

    public static StarterFragment newInstance(int pagerId) {
        StarterFragment sf = new StarterFragment();
        Bundle args = new Bundle();
        args.putInt("pagerId", pagerId);
        sf.setArguments(args);
        return sf;
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        ((ViewPager) getActivity().findViewById(
                getArguments().getInt("pagerId"))).setCurrentItem(position,
                true);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setListAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, new String[] { "None",
                        "First Page", "Second Page", "Third Page", "Forth Page" }));
    }

}

public static class NormalFragment extends Fragment {

    public static NormalFragment newInstance(int position) {
        NormalFragment nf = new NormalFragment();
        Bundle args = new Bundle();
        args.putInt("position", position);
        nf.setArguments(args);
        return nf;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        TextView tv = new TextView(getActivity());
        tv.setText("Fragment no." + getArguments().getInt("position"));
        return tv;
    }

}

代码是这样的。您可以使用上面看到的适配器创建ViewPager。在这个ViewPager中,您将有两种类型的Fragments,第一种具有所有方向Buttons,另一种类型是要滚动的普通Fragments。为简单起见,我使用了ListFragment,您可以使用Buttons自己的布局,轻松调整代码。对于此Fragment,您可以从ViewPager传递FragmentActivity的ID,以便稍后使用它。当用户点击第一个Buttons中的Fragment之一,然后在onClick的{​​{1}}方法中,您将使用Button和{{ 1}}找到getActivity()并在其上使用方法findViewById滚动到ViewPager。由于setCurrentItem(position, true)仍然可以在Fragment

之间手动滑动