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

Android 通过片段水平滚动,也可以通过按钮访问片段?,android,button,onclick,android-fragments,Android,Button,Onclick,Android Fragments,我一直绞尽脑汁想解决的问题。解释我想要什么的最简单方法是在我起草的png中: 因此,我在第一个屏幕上有4个TextView&ImageView视图,如果您滑动到其他屏幕,我希望能够将我带到具有相同动画效果的屏幕。有很多应用程序可以做到这一点,但我自己却不知道如何实现它。显然,我必须首先使用OnClickListener使ImageView和TextView可单击。但是我在里面做什么呢 我已经使用片段设置了水平滚动,但这最后一块拼图是我正在努力的。我想让用户可以选择如何浏览我的应用程序,一些用户可

我一直绞尽脑汁想解决的问题。解释我想要什么的最简单方法是在我起草的png中:

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

我已经使用片段设置了水平滚动,但这最后一块拼图是我正在努力的。我想让用户可以选择如何浏览我的应用程序,一些用户可以点击ImageView/TextView为他们刷卡,或者一些用户可以直接刷卡进入其他片段

希望我已经正确地解释了这一点。事实上,Play Store做了我想做的事情,除了它使用标签(从顶级免费到顶级付费等)。这是我不想使用的(标签)。我希望我可以通过设置在TextView和ImageView上的onclick来复制它

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


编辑:事实上,在做一些研究时,我遇到了一个叫做“碎片交易”的东西。这样做对吗?我只是偶然发现了它,所以我不完全理解。

您要找的是一个
查看页面。我制作了一个小示例,向您展示如何实现所需的行为:

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;
    }

}
私有类MyAdapter扩展了FragmentPagerAdapter{
公共MyAdapter(FragmentManager fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
如果(位置==0){
返回StarterFragment.newInstance(R.id.viewPagerIdFromTheLayout);
}否则{
返回NormalFragment.newInstance(位置);
}
}
@凌驾
public int getCount(){
返回5;
}
}
公共静态类StarterFragment扩展了ListFragment{
公共静态实例(int pagerId){
StarterFragment sf=新的StarterFragment();
Bundle args=新Bundle();
参数putInt(“pagerId”,pagerId);
sf.setArguments(args);
返回sf;
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
((ViewPager)getActivity().findViewById(
getArguments().getInt(“pagerId”)).setCurrentItem(位置,
正确的);
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setListAdapter(新的ArrayAdapter(getActivity()),
android.R.layout.simple_list_item_1,新字符串[]{“无”,
“第一页”、“第二页”、“第三页”、“第四页”});
}
}
公共静态类NormalFragment扩展了片段{
公共静态实例(int位置){
NormalFragment nf=新的NormalFragment();
Bundle args=新Bundle();
参数putInt(“位置”,位置);
nf.setArguments(args);
返回nf;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
TextView tv=新的TextView(getActivity());
tv.setText(“片段编号”+getArguments().getInt(“位置”);
返回电视;
}
}

代码是这样的。您可以使用上面看到的适配器创建一个
ViewPager
。在这个
ViewPager
中,您将有两种类型的
片段
,第一种带有所有方向
按钮
,另一种类型是要滚动到的普通
片段
。为了简单起见,我使用了一个
列表片段
,您可以使用自己的布局和
按钮
,您可以轻松地调整代码。对于此
Fragment
,您将从
FragmentActivity
传递
ViewPager
的id,以供以后使用。当用户从第一个
片段中单击其中一个
按钮时,然后在该
按钮的
onClick
方法中,您将使用
getActivity()
findViewById
查找
查看页面
,并使用方法
setCurrentItem(位置,true)
滚动到该
片段
。由于
ViewPager
的原因,如果您“滚动”到片段3,则仍然可以在
片段之间手动滑动

,是否要查看动画中的其他两个片段?@LuksProg:是的,我希望如此。您确定您不是在寻找
ViewPager
()?它将允许您在片段之间滑动,您可以轻松地使用按钮移动到某个页面,即使是平滑的滚动。@Luksprog:我已经通过FragmentPagerAdapter设置了水平滚动,所以我实现了部分视图寻呼机。每一页都是一个片段。我希望有一些代码可以放在onClick中,让我滑到一个特定的片段中。很抱歉,这让我很痛苦,但这确实让人困惑。也许这只是因为我现在的代码有了很大的改变。这就是我现在的参考:我的所有片段都是独立的类,然后我在我的FragmentActivity中调用它们。显然,我会继续阅读你的代码,看看我能学到什么。@RED_u你为什么要使用
片段的数组列表
?您是否计划更改
查看页面
中的
片段数
?您需要为第一个
片段设置一个bundle(当您实例化片段时)(我假定为MainActivity),并将
ViewPager`的
id
(R.id.mysixpanelpager
)传递给它,就像我在