无法在阵列适配器内的View Pager中添加视图或使视图膨胀

时间:2018-08-05 04:47:15

标签: android android-arrayadapter android-cardview

我使用了一个外部库,名为“ Diolor刷卡”,并将其附加到Array Adapter上。在每张卡中,我还需要制作一个View Pager并带有条形,以显示用户当前正在查看的图像。我遇到的问题是,当我在View Pager上设置OnPageChangeListener时,它将调用方法onPageSelected并执行其中的所有代码。这涉及到对createBars(包括在下面)的调用。但是,createBars中的所有内容都将执行,包括barHolder.removeAllView,除了li.inflate语句。我也尝试使用addView,但是发生类似的问题。请建议一种方法来解决此问题,并在可能的情况下建议其原因。我已经包含了Array AdaptercreateBars方法的getView代码中的代码。让我知道其他代码是否有帮助。

 private void createBars(int position, int numItems, LinearLayout barHolder) {

    barHolder.removeAllViews();
    Log.i("View pager listner", "method called");


    for (int i = 0; i < numItems; i++) {
        if (i == position) {
            li.inflate(R.layout.white_rectangle, barHolder);
        } else {
            li.inflate(R.layout.transparent_white_rectangle, barHolder);
        }
    }
}

public View getView(int position, View itemView, ViewGroup parent) {

    // all views required for a card
    final ProgressBar homeProgressBar;
    final TextView homeTimeLeft;
    TextView homeTitle;
    CardView homeItemHolder;

    HomeItem item = getItem(position);
    final int numItems = item.getItemImages().length;

    if (itemView == null) {
        itemView = li.inflate(R.layout.home_item, parent, false);
    }


    homeProgressBar = itemView.findViewById(R.id.home_progressbar);
    homeTimeLeft = itemView.findViewById(R.id.home_time_text);
    homeTitle = itemView.findViewById(R.id.home_card_title);
    homeViewPager = itemView.findViewById(R.id.home_view_pager);

    homeViewPager.setOffscreenPageLimit(6);

    timeLeftItem = item.getTimeLeftMiliseconds();
    homeTitle.setText(item.getTitle());

    HomeImageHolder viewPagerAdapter = new HomeImageHolder(context, item.getItemImages());
    homeViewPager.setAdapter(viewPagerAdapter);
    final LinearLayout barHolder = itemView.findViewById(R.id.home_bars);
    createBars(0, item.getItemImages().length, barHolder);

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

        }

        @Override
        public void onPageSelected(int position) {
            Log.i("view pager listner", "it listned");
            createBars(position, numItems, barHolder);
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    countDownTimer = new CountDownTimer(timeLeftItem, milisecondsInHours) {

        @Override
        public void onTick(long millisUntilFinished) {
            homeTimeLeft.setText(HelperMethods.milisecondsToDays(millisUntilFinished) + " Days "
                    + HelperMethods.milisecondsToHours(millisUntilFinished) + " Hours");
            homeProgressBar.setProgress(updateProgressBar(millisUntilFinished));

        }

        @Override
        public void onFinish() {
            homeTimeLeft.setText("0 Days 0 Hours");
            homeProgressBar.setProgress(updateProgressBar(0));

        }
    };
    countDownTimer.start();

    return itemView;
}

充气机在监听器外部调用时起作用,但在监听器内部调用时不起作用。这是什么原因?

编辑:我发现添加了数组适配器的类(Diolor的刷卡)在数组中的将来对象上调用getView 4次。这可能是一个潜在的问题。我知道对于给定的卡,侦听器中对酒吧持有人的引用不会更改。我使用Logs和toString方法来确认传递到列表器中的LinearLayout与对应于当前卡的barHolder一致。

0 个答案:

没有答案