0

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

因此,我在第一个屏幕上有 4 个 TextView 和 ImageView,如果您向它们滑动,我希望能够以相同的动画效果将我带到其他屏幕。有很多应用程序可以做到这一点,但我实际上不知道如何自己实现它。显然,我必须首先使用 OnClickListener 使我的 ImageViews 和 TextViews 可点击。我在里面做什么?

我已经使用 Fragments 设置了水平滚动,但最后一块拼图是我正在努力解决的问题。我想让用户选择他们如何导航我的应用程序,有些人可以单击 ImageViews/TextViews 来为他们滑动,或者有些人可以向右滑动以访问其他片段。

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

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

编辑:实际上,在做一些研究时,我遇到了一个叫做“FragmentTransaction”的东西。这是做这一切的正确方法吗?刚接触,所以不是很明白。

4

1 回答 1

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您将传递ViewPagerfrom 的idFragmentActivity以供以后使用。当用户Buttons从第一个中单击其中一个时Fragment,在 that 的onClick方法中Button,您将使用getActivity()andfindViewById找到ViewPager并使用其setCurrentItem(position, true)上的方法滚动到该方法Fragment。因为ViewPager仍然可以在Fragments.

于 2012-11-21T11:07:44.267 回答