【问题标题】:how to get the text of text-view inside view-pager current page in Toast如何在Toast中的view-pager当前页面中获取text-view的文本
【发布时间】:2016-12-08 09:09:04
【问题描述】:

我想在 onPageSelected() 的 toast 中获取 ViewPager 当前页面的 TextView 文本。请记住,我的数据在 array-list 中,如果我从 array-list 中删除任何位置,则文本不应在滑动视图寻呼机上显示在 toast 中。

下面是我的代码:

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

     }
}

【问题讨论】:

  • onPageSelected() 获取页码,并根据使用此页码的列表中的文本!
  • 你能给我一个小代码示例吗?因为如果我在删除任何页面时根据当前页面位置获取文本,它仍然显示已删除的文本。
  • 是的,你是对的!那么您还需要从列表中删除相同的项目。

标签: android android-viewpager


【解决方案1】:

请试试这个代码

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


         MyImageSlider  fragmntDta = (MyImageSlider ) findFragmentByPosition(mCurrentPos);
          String value = fragmntDta.getTextOnTextView();
            Toast toast = Toast.makeText(getApplicationContext(),"Text is " +value, 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;
    TextView textView;
     public static MyImageSlider newInstance(String s)
     {
         MyImageSlider slider=new MyImageSlider();
         Bundle b=new Bundle();
         b.putString("newid", s);
         slider.setArguments(b);
         return slider;
     }

     public String getTextOnTextView(){
     retrun textView.getText();
     }

     @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);
         textView = (TextView)view.findViewById(R.id.text);
         textView.setText(newid);
         textView.setTag(newid);
         return view;
     }

  }

  public Fragment findFragmentByPosition(int position) {
    MyImageSlider fragmentPagerAdapter = mAdapter;
    return getSupportFragmentManager().findFragmentByTag("android:switcher:" + mHorizontalViewPager.getId() + ":" + fragmentPagerAdapter.getItemId(position));
 }
}

【讨论】:

  • 请解释我不明白的 findFragmentByPosition(int position) 方法。
【解决方案2】:

您应该关注AndiGeeky 的解决方案。

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

View view = pager1.getChildAt(position);

稍后使用view.findViewById(R.id.textviewid) 获取该文本视图

您的代码应如下所示。

@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 的ID,它位于Fragment

【讨论】:

  • 我尝试过,但是当我滑回上一个位置时它给了我错误的值
  • 还打印位置值,并检查您是否显示正确的页面。
猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
相关资源
最近更新 更多