【问题标题】:How to add an image slider with dots indicator inside a fragment?如何在片段内添加带有点指示符的图像滑块?
【发布时间】:2018-07-21 07:15:54
【问题描述】:

我是 android 新手,我想在已扩展到 Fragment 的类中添加带点指示符的图像滑块。我想在 fragment_about_sl.xml(代码如下所示)和后端添加图像滑块在 aboutSLFragment.java 中(代码如下所示)。我该怎么做,请告诉我要实现的完整代码。

fragment_about_sl.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">

<!-- TODO: Update blank fragment layout -->

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="hkjhkjhkjhk"/>
</LinearLayout>

关于SLFragment.java

public class aboutSLFragment extends Fragment {



public aboutSLFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_about_sl, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //you can set the title for your toolbar here for different fragments different titles
    getActivity().setTitle("About Sri Lanka");
}

}

我已将 aboutSLFragment.java 扩展为 Fragment,因为我在创建导航抽屉时使用了 Fragment。请告诉我要在 xml 和 java 类中添加什么。谢谢!

我已将图像滑块添加到我的班级,但有一些红色错误。谁能帮忙。我已将红色错误加粗。 公共类 aboutSLFragment 扩展了 Fragment{

ViewPager viewPager;
LinearLayout sliderDotspanel;
private int dotscount;
private ImageView[] dots;


public aboutSLFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    viewPager = (ViewPager) **findViewById**(R.id.viewPager);

    sliderDotspanel = (LinearLayout) **findViewById**(R.id.SliderDots);

    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(**this**);

    viewPager.setAdapter(viewPagerAdapter);

    dotscount = viewPagerAdapter.getCount();
    dots = new ImageView[dotscount];

    for(int i = 0; i < dotscount; i++){

        dots[i] = new ImageView(**this**);
        dots[i].setImageDrawable(ContextCompat.getDrawable(**getApplicationContext()**, R.drawable.non_active_dot));

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

        params.setMargins(8, 0, 8, 0);

        sliderDotspanel.addView(dots[i], params);

    }

    dots[0].setImageDrawable(ContextCompat.getDrawable(**getApplicationContext()**, R.drawable.active_dot));

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

            for(int i = 0; i< dotscount; i++){
                dots[i].setImageDrawable(ContextCompat.getDrawable(**getApplicationContext()**, R.drawable.non_active_dot));
            }

            dots[position].setImageDrawable(ContextCompat.getDrawable(**getApplicationContext()**, R.drawable.active_dot));

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_about_sl, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //you can set the title for your toolbar here for different fragments different titles
    getActivity().setTitle("About Sri Lanka");
}

}

【问题讨论】:

  • 对于图像滑块,您可以使用ViewPager。并为自己找到或构建一个带有点的指标。
  • 我知道。如果你有源代码请给我看看
  • 不欢迎我们代替你写代码。只有你自己应该编写你的代码。展示您的努力并告诉我们问题所在,我们会尽力提供帮助
  • 你好 Vlad Matvienko,我添加了一个图像滑块,但它有一些我无法解决的错误。请你看一下并告诉我如何更正。我已将错误加粗.谢谢你
  • 下次您在这里提问时,请务必添加错误文本。你绝对必须这样做。因为在大多数情况下,你得到的错误并不明显。但在这里我看到你得到了哪些错误。你得到它们是因为你缺少关于 Java 和 Fragments 的基本知识。在继续之前,您确实必须学习一些基本课程。为了解决这些错误,请在询问之前尝试搜索它们。

标签: java android xml android-fragments navigation-drawer


【解决方案1】:

这是您的代码的编辑形式

ViewPager viewPager;
LinearLayout sliderDotspanel;
private int dotscount;
private ImageView[] dots;


public aboutSLFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_about_sl, container, false);

    viewPager = (ViewPager) view.findViewById(R.id.viewPager);

    sliderDotspanel = (LinearLayout) view.findViewById(R.id.SliderDots);

    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getActivity());

    viewPager.setAdapter(viewPagerAdapter);

    dotscount = viewPagerAdapter.getCount();
    dots = new ImageView[dotscount];

    for(int i = 0; i < dotscount; i++){

        dots[i] = new ImageView(getActivity());
        dots[i].setImageDrawable(ContextCompat.getDrawable(getActivity().getApplicationContext(), R.drawable.non_active_dot));

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

        params.setMargins(8, 0, 8, 0);

        sliderDotspanel.addView(dots[i], params);

    }

    dots[0].setImageDrawable(ContextCompat.getDrawable(getActivity().getApplicationContext(), R.drawable.active_dot));

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

            for(int i = 0; i< dotscount; i++){
                dots[i].setImageDrawable(ContextCompat.getDrawable(getActivity().getApplicationContext(), R.drawable.non_active_dot));
            }

            dots[position].setImageDrawable(ContextCompat.getDrawable(getActivity().getApplicationContext(), R.drawable.active_dot));

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    // Inflate the layout for this fragment
    return view;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //you can set the title for your toolbar here for different fragments different titles
    getActivity().setTitle("About Sri Lanka");
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    相关资源
    最近更新 更多