我试着将viewPager添加到我的项目中,但有问题 [关闭] 。

问题描述 投票:0回答:1

这个问题是由以下原因引起的

java.lang.ArrayIndexOutfBoundsException: length=0; index=0。

在com.example.proje.DetayActivity.onCreate(DetayActivity.java:78)

这个页面是我添加Viewpager在活动上显示的地方。我认为是数组列表有问题,但它看起来正常,因为我找不到任何问题。谢谢你的帮助。


package com.example.proje;
 imports..

public class DetayActivity extends AppCompatActivity {

    ViewPager viewPager;
    LinearLayout sliderDotspanel;
    private int dotscount;
    private ImageView[] dots;
    private ArrayList<String> urls;
    String key;
    TextView txt1;
    TextView txt2;
    TextView txt3;
    TextView txt4;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detay);
        setTitle("Detaylar");

        txt1 = findViewById(R.id.txttarih);
        txt2 = findViewById(R.id.txturunadi);
        txt3 = findViewById(R.id.txtfiyati);
        txt4 = findViewById(R.id.txtaciklama);

        Intent intent = getIntent();
        key = intent.getStringExtra("key");
        urls = new ArrayList<>();

        getdata();


        viewPager = findViewById(R.id.viewPager);

        sliderDotspanel = findViewById(R.id.SliderDots);


        ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this , urls);

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

    }

    private void getdata() {

        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("urunler").child(key);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Urun urun = dataSnapshot.getValue(Urun.class);
                txt1.setText(urun.getTarih());
                txt2.setText(urun.getUrunAdi());
                txt3.setText(Double.toString(urun.getFiyat()));
                txt4.setText(urun.getAciklama());
                urls.add(urun.getResim1());
                urls.add(urun.getResim2());
                urls.add(urun.getResim3());

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
}
}

这个页面是viewpager适配器

package com.example.proje;
imports..

public class ViewPagerAdapter extends PagerAdapter {

    private Context context;
    private LayoutInflater layoutInflater;
    private Integer [] images = {R.drawable.logo,R.drawable.doluredkalp,R.drawable.redheart};
    private ArrayList<String> urls = new ArrayList<>();



    public ViewPagerAdapter(Context context , ArrayList<String> urls) {
        this.context = context;
        this.urls = urls;

    }

    @Override
    public int getCount() {
        return urls.size();
    }

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

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

        final String url = urls.get(position);

        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.layoutpager, null);
        ImageView imageView = view.findViewById(R.id.imageView);    
        Picasso.get().load(url).placeholder(R.drawable.logo).into(imageView);

        ViewPager vp = (ViewPager) container;
        vp.addView(view, 0);
        return view;
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

        ViewPager vp = (ViewPager) container;
        View view = (View) object;
        vp.removeView(view);

    }
}
android arraylist android-viewpager slider stringindexoutofbounds
1个回答
1
投票

你的问题在下面一行

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

dots 数组是空的,当你试图获取索引0处的元素时,你会得到这个错误,因为索引0处没有元素。

更新了。

你可以看到,dots是一个数组,其计数等于 dotscount.

dotscount 变量是计数的 viewPagerAdapter 物品

你传递给viewPagerAdapter urls 数组是空的。

这就是为什么你得到错误的原因 ArrayIndexOutOfBoundsException

我觉得你应该创建 dots 阵中 onDataChange 方法后,您填写 urls 数组,这将解决这个错误

© www.soinside.com 2019 - 2024. All rights reserved.