[英]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.