简体   繁体   English

Android - 无法在 View Pager Adapter 中更新 textview

[英]Android - Can't update textview within View Pager Adapter

I have a counter view which should update as user touch minus and plus buttons.我有一个计数器视图,它应该随着用户触摸minus plus按钮而更新。

I'm trying to update counter within ViewPager's adapter instantiateItem method, but it doesn't make any effect.我正在尝试在 ViewPager 的适配器instantiateItem方法中更新计数器,但它没有任何效果。

I can update it's value only in instantiateItem .我只能在instantiateItem中更新它的值。 Is there any way to setText() outside of instantiateItem ?有没有办法在instantiateItem之外设置setText() Sorry for dumb question, i'm a newbie in Android.对不起,愚蠢的问题,我是 Android 的新手。

public class OrderVPAdapter extends PagerAdapter implements View.OnClickListener {

    private ArrayList<SomeItem> list;
    private Context context;

    public TextView counterView;
    View view;

    // I skipped some code for better understanding

    int counter = 0;

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        LayoutInflater layoutInflater = LayoutInflater.from(context);

        view = layoutInflater.inflate(R.layout.vp_item, container, false);

        counterView = view.findViewById(R.id.counter);

        Button plus, minus;
        plus = view.findViewById(R.id.btn_plus);
        plus.setOnClickListener(this);

        minus = view.findViewById(R.id.btn_minus);
        minus.setOnClickListener(this);

        container.addView(view, 0);

        return view;
    }

    @Override
    public void onClick(View view) {
        if(view.getId() == R.id.btn_plus) {
            counter++;
        }
        else {
            if(counter > 0)
                counter--;
        }
        counterView.setText(counter);
    }

It's a good question for beginners Ian, check my comments for each change I have made:对于初学者伊恩来说,这是一个很好的问题,请查看我对我所做的每项更改的评论:

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;

public class OrderVPPageAdapter extends PagerAdapter {

    // 10 counters, one for each page
    int[] counter = new int[10];

    @Override
    public int getCount() {
        return 10;
    }

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

    @NonNull
    @Override
    public Object instantiateItem(final ViewGroup container, int position) {
        LayoutInflater layoutInflater = LayoutInflater.from(container.getContext());
        View view = layoutInflater.inflate(R.layout.vp_item, container, false);

        // counterView needs to be local variable so it can serve as          
        // reference for each page when updated inside buttons' OnClickListener
        TextView counterView = view.findViewById(R.id.counter);
        Button plus = view.findViewById(R.id.btn_plus);
        Button minus = view.findViewById(R.id.btn_minus);

        // Set up counter value every time as this method will be 
        // called and update UI whenever you swipe between pages
        counterView.setText(String.valueOf(counter[position]));

        plus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Update specific page counter in array position
                counter[position]++;
                counterView.setText(String.valueOf(counter[position]));
            }
        });

        minus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (counter[position] > 0)
                    counter[position]--;
                counterView.setText(String.valueOf(counter[position]));
            }
        });

        container.addView(view);

        return view;
    }

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM