如何在Toast中的view-pager当前页面内获取text-view文本

时间:2016-12-08 09:09:05

标签: android android-viewpager

我想在onPageSelected()中获取ViewPager当前页面的TextView文本。记住我的数据在数组列表中,如果我从数组列表中删除任何位置,那么在滑动视图 - 寻呼机上不应该在吐司中显示文本。

以下是我的代码:

 public class MainActivity extends FragmentActivity {
     public static TextView tx;
    CustomViewPager pager1;
    List<Fragment> fragments1;
    public PagerAdapter adapter1;

   ArrayList<String> image = new ArrayList<String>() {{
         add("0");
         add("1");
         add("2");
         add("3");
         add("4");
     }};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.text);

        pager1 = (CustomViewPager) findViewById(R.id.pager1);
        fragments1 = getFragments1();
        adapter1 = new PagerAdapter(getSupportFragmentManager(), fragments1);
        pager1.setAdapter(adapter1);
        removeView1(1);
        adapter1.notifyDataSetChanged();

        pager1.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            @Override
            public void onPageSelected(int position) {

                String S= (String) tx.getTag();

                Toast toast = Toast.makeText(getApplicationContext(),"Text is " +S, Toast.LENGTH_SHORT);
                toast.show();

            }

           @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }


     public void removeView1 (int position)
     {
         adapter1.removeView1(pager1, position);
         adapter1.notifyDataSetChanged();
     }


     public class PagerAdapter extends FragmentPagerAdapter {

        private List<Fragment> fragments;

        public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
            super(fm);
            this.fragments = fragments;
        }

         @Override
        public Fragment getItem(int position) {
            return this.fragments.get(position);
        }
        @Override
        public int getCount() {
            return this.fragments.size();
        }

      @Override
      public int getItemPosition (Object object)
      {
          if (object instanceof MyImageSlider ) {
              return POSITION_NONE;
          }
          return POSITION_UNCHANGED;
      }


         public int removeView1 (ViewPager pager, int position)
         {
             pager.setAdapter (null);
             fragments.remove (position);
             pager.setAdapter (this);
             return position;
         }     

     }

    private List<Fragment> getFragments1() {
        List<Fragment> fList = new ArrayList<Fragment>();
        for (int i = 0; i < image.size(); i++) {
            fList.add(MyImageSlider.newInstance(image.get(i)));
        }
        return fList;
    }

     public static class MyImageSlider extends Fragment {
         String newid;

         public static MyImageSlider newInstance(String s)
         {
             MyImageSlider slider=new MyImageSlider();
             Bundle b=new Bundle();
             b.putString("newid", s);
             slider.setArguments(b);
             return slider;
         }

         @Override
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             newid = getArguments().getString("newid");
         }

         @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
             View view = inflater.inflate(R.layout.leftpager,container, false);
             tx = (TextView)view.findViewById(R.id.text);
             tx.setText(newid);
             tx.setTag(newid);
             return view;
         }

     }
}

2 个答案:

答案 0 :(得分:1)

请尝试此代码

($cookiehash)

答案 1 :(得分:1)

你应该遵循AndiGeeky的解决方案。

除了该解决方案,您甚至可以获得在该位置可见的视图。

View view = pager1.getChildAt(position);

稍后使用view.findViewById(R.id.textviewid)

获取该textview

你的代码看起来应该是这样的。

@Override
public void onPageSelected(int position) {

    View view = pager1.getChildAt(position);
    TextView tv = (TextView)view.findViewById(R.id.<textviewId>);

    Toast toast = Toast.makeText(getApplicationContext(),"Text is " + tv.getText().toString(), Toast.LENGTH_SHORT);
    toast.show();

}

注意: textviewId将是TextView

Fragment的ID