Reputation: 141
I have a viewpager with each page contain a number
Example:
page 1 contain textview with text "1"
page 2 contain textview with text "2"
......add 20 more
Then I get text by:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
TextView myText= adapter.getTextView();
CharSequence charSequence = dateArea.getText();
String dateString = charSequence.toString();
Log.e("TEST1", dateString);
}
}
When I slide 1 way (right or left),it shows the text correctly. But when I slide 2 way, the problem appear:
Example:
I slide left ( start from 10 ), the result is 9 (correct).
Then I slide right, the result is still 9 (it should be 10).
Then I slide left again, the result is 9. At this point,if I slide left one more time, it will show correct result which is 8. Please show me how to fix this!
EDIT:
public class ViewPagerAdapter extends PagerAdapter {
Context context;
LayoutInflater inflater;
String[] listNumber;
TextView textView;
public ViewPagerAdapter(Context context, String[] listNumber) {
this.context = context;
this.listNumber= listNumber;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.viewpager_adapter, container, false);
textView= (TextView) itemView.findViewById(R.id.textView);
textView.setText(listNumber[position]);
((ViewPager) container).addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// Remove viewpager_item.xml from ViewPager
((ViewPager) container).removeView((RelativeLayout) object);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return listNumber.length;
}
public TextView getTextView() {
return textView;
}
}
Upvotes: 2
Views: 67
Reputation: 1591
First, change your adapter to this by making the TextView local:
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.viewpager_adapter, container, false);
Textview textView= (TextView) itemView.findViewById(R.id.textView);
textView.setText(listNumber[position]);
textView.setTag("tv"+position);
((ViewPager) container).addView(itemView);
return itemView;
}
Then, you can get the textview on pagechange by using the following snippet. The adapter.getTextView() is not necessary anymore.
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
TextView myText= (TextView) mViewPager.findViewWithTag("tv"+ arg0);
mText.setText(dateString);
CharSequence charSequence = dateArea.getText();
String dateString = charSequence.toString();
Log.e("TEST1", dateString);
}
}
Upvotes: 1