如何解决Android - 无法在 View Pager Adapter 中更新 textview
我有一个计数器视图,它应该随着用户触摸 minus
和 plus
按钮而更新。
我正在尝试在 ViewPager 的适配器 instantiateItem
方法中更新计数器,但没有任何效果。
我只能在 instantiateItem
中更新它的值。有没有办法在setText()
之外instantiateItem
?抱歉问了一个愚蠢的问题,我是 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);
}
解决方法
对于初学者伊恩来说这是一个很好的问题,请查看我所做的每项更改的评论:
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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。