2015-07-22 30 views
2

我有每個頁面viewpager包含許多如何解決viewpager這個奇怪的問題?

實施例:

頁面1包含具有文本 「1」

頁2的TextView包含具有文本 「2」

的TextView ..

 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); 

        } 
} 
:....由加了20個

然後我得到的文本

當我滑動1路(右或左)時,它會正確顯示文本。但是,當我滑動2路,問題出現:

實施例:

我向左滑動(從10開始),其結果是如圖9(正確的)。

然後我向右滑動,結果仍然是9(應該是10)。

然後我再次向左滑動,結果是9.此時,如果再向左滑動一次,它將顯示正確的結果,即8。請告訴我如何解決這個問題!

編輯:

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; 
     } 
    } 
+1

你可以發佈適配器getTextView()嗎? – W3hri

+0

@ W3hri我編輯它,請看看:) –

回答

1

首先,通過使TextView的本地更改適配器這樣的:

@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; 

    } 

然後,您可以通過下面的代碼片段獲得pagechange TextView的。 adapter.getTextView()不再是必需的。

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); 

     } 
    } 
+0

什麼是getItem?我只看到getItemPosition方法。 –

+0

對不起,我正在看一個FragmentpagerAdapter。我更新了我的答案,並希望這有助於。 – W3hri

+0

它完美的炒作!你太棒了! :歡呼聲: –