当前位置: 代码迷 >> Android >> 在ViewPager中打开新视图
  详细解决方案

在ViewPager中打开新视图

热度:95   发布时间:2023-08-04 10:14:50.0

在我的Android应用程序上使用 。 这是整个代码:

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_horizontal_ntb);
        initUI();
    }

    private void initUI() {
        final ViewPager viewPager = (ViewPager) findViewById(R.id.vp_horizontal_ntb);
        viewPager.setAdapter(new PagerAdapter() {
            @Override
            public int getCount() {
                return 5;
            }

            @Override
            public boolean isViewFromObject(final View view, final Object object) {
                return view.equals(object);
            }

            @Override
            public void destroyItem(final View container, final int position, final Object object) {
                ((ViewPager) container).removeView((View) object);
            }

            @Override
            public Object instantiateItem(final ViewGroup container, final int position) {

                final View viewNews = LayoutInflater.from(
                        getBaseContext()).inflate(R.layout.item_vp_list, null, false);

                final View ViewSol = LayoutInflater.from(
                        getBaseContext()).inflate(R.layout.activity_sol, null, false);

                final View viewProfile = LayoutInflater.from(
                        getBaseContext()).inflate(R.layout.activity_profile, null, false);

                final View viewContact = LayoutInflater.from(
                        getBaseContext()).inflate(R.layout.activity_contact, null, false);

                View finalView = null;

                if (position == 0) {
                    final RecyclerView recyclerView = (RecyclerView) viewNews.findViewById(R.id.rv);
                    recyclerView.setHasFixedSize(true);
                    recyclerView.setLayoutManager(new LinearLayoutManager(
                                    getBaseContext(), LinearLayoutManager.VERTICAL, false
                            )
                    );
                    recyclerView.setAdapter(new RecycleAdapter());
                    container.addView(viewNews);
                    finalView = viewNews;
                } else if (position == 1) {
                    container.addView(viewSol);
                    finalView = viewSol;
                } else if (position == 2) {
                    container.addView(viewProfile);
                    finalView = viewProfile;
                } else if (position == 3){
                    container.addView(viewContact);
                    finalView = viewContact;
                }

                return finalView;
            }
        });

        final String[] colors = getResources().getStringArray(R.array.default_preview);

        final NavigationTabBar navigationTabBar = (NavigationTabBar) findViewById(R.id.ntb_horizontal);
        final ArrayList<NavigationTabBar.Model> models = new ArrayList<>();
        models.add(
                new NavigationTabBar.Model.Builder(
                        getResources().getDrawable(R.drawable.ic_library),
                        Color.parseColor(colors[0]))
                        .selectedIcon(getResources().getDrawable(R.drawable.ic_library))
                        .title("News")
                        .badgeTitle("+10")
                        .build()
        );
        models.add(
                new NavigationTabBar.Model.Builder(
                        getResources().getDrawable(R.drawable.ic_error_black_24dp),
                        Color.parseColor(colors[1]))
//                        .selectedIcon(getResources().getDrawable(R.drawable.ic_eighth))
                        .title("Solicitation")
                        //.badgeTitle("with")
                        .build()
        );
        models.add(
                new NavigationTabBar.Model.Builder(
                        getResources().getDrawable(R.drawable.ic_person_black_24dp),
                        Color.parseColor(colors[3]))
//                        .selectedIcon(getResources().getDrawable(R.drawable.ic_eighth))
                        .title("My Account")
                        //.badgeTitle("icon")
                        .build()
        );
        models.add(
                new NavigationTabBar.Model.Builder(
                        getResources().getDrawable(R.drawable.ic_phone_black_24dp),
                        Color.parseColor(colors[2]))
                        .selectedIcon(getResources().getDrawable(R.drawable.ic_phone_black_24dp))
                        .title("Contact")
                        //.badgeTitle("state")
                        .build()
        );

        navigationTabBar.setModels(models);
        navigationTabBar.setViewPager(viewPager, 2);
        navigationTabBar.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(final int position) {
                navigationTabBar.getModels().get(position).hideBadge();
            }

            @Override
            public void onPageScrollStateChanged(final int state) {

            }
        });

        navigationTabBar.postDelayed(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < navigationTabBar.getModels().size(); i++) {
                    final NavigationTabBar.Model model = navigationTabBar.getModels().get(i);
                    navigationTabBar.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            //model.showBadge();
                        }
                    }, i * 100);
                }
            }
        }, 500);
    }

如您所见,每当我选择一个选项卡时,它都会在视图分页器中打开视图。

但是,我不知道单击按钮时如何打开另一个视图。 我试图用意图开始一个全新的活动,但是它崩溃了,这并不是我真正想要的。

我想要的是在viewpager上打开视图ViewPager viewPager = (ViewPager) findViewById(R.id.vp_horizontal_ntb);

如果我实现这一点:

public void openNewView(View view) {
    //the code to open a view inside the viewpager should go here
}

我该如何进行?

在最初设置为Visibility = GONE或Invisible的布局中,将一个视图添加到viewPager中,并在希望其在屏幕上可见时将其更改为Visible。

或者使用layoutInflater将其他布局中的视图添加到您的viewpager

要通过单击某些按钮来打开新视图,可以执行以下操作:

假设你想拥有的第一个按钮一个新的观点,则在该方法instantiateItem PagerAdapter,你可以检查的位置是0。

如果位置为0,则可以为要显示的布局充气。

像这样的东西:

            @Override
            public Object instantiateItem(final ViewGroup container, final int position) {
if (position == 0)
{
                final View view = LayoutInflater.from(
                        getBaseContext()).inflate(R.layout.your_layout, null, false);

                final TextView txtPage = (TextView) view.findViewById(R.id.txt_vp_item_page);
                txtPage.setText(String.format("Page #%d", position));

                container.addView(view);
                return view;
}
else if (position == 1)
{
                final View view = LayoutInflater.from(
                        getBaseContext()).inflate(R.layout.item_vp, null, false);

                final TextView txtPage = (TextView) view.findViewById(R.id.txt_vp_item_page);
                txtPage.setText(String.format("Page #%d", position));

                container.addView(view);
                return view;
}
else
{

                final View view = LayoutInflater.from(
                        getBaseContext()).inflate(R.layout.item_vp, null, false);

                final TextView txtPage = (TextView) view.findViewById(R.id.txt_vp_item_page);
                txtPage.setText(String.format("Page #%d", position));

                container.addView(view);
                return view;
}
            }

为了使您的代码更具模块化,您可以使用在适配器中创建自定义片段和它们。

希望这可以帮助

  相关解决方案