2016-12-08 1 views
0

Я хочу получить текст TextView текущей страницы ViewPager в тосте в onPageSelected(). Помните, что мои данные находятся в списке массивов, если я удаляю любую позицию из списка массивов, этот текст не должен отображаться в тосте на сабвуфере-пейджере.Как получить текст текстового представления внутри текущей страницы-пейджера в 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; 
     } 

    } 
} 
+1

Получить номер страницы от 'onPageSelected()' и в соответствии текст из списка, используя этот номер страницы! – AndiGeeky

+0

Можете ли вы дать мне небольшой пример кода. потому что, если я получаю текст в соответствии с текущей позицией страницы, когда я удаляю любую страницу, она все равно отображает удаленный текст. –

+0

Да, вы правы! то вам также нужно удалить тот же элемент из списка. – AndiGeeky

ответ

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)); 
} 
} 
+0

, пожалуйста, объясните мне метод findFragmentByPosition (int position), который я не получаю. –

+0

благодарит его правильный ответ –

0

вы должны следовать AndiGeeky «s решения.

В дополнение к этому решению вы даже можете получить представление, которое видно на этом месте.

View view = pager1.getChildAt(position); 

и позже получить, что TextView с помощью 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, который находится в Fragment

+0

Я пытаюсь, но он дает мне неправильные значения, когда я сажусь назад в предыдущую позицию. –

+0

также напечатайте значение позиции и проверьте, показываете ли вы правильные страницы или нет. –

Смежные вопросы