2016-12-09 34 views
1

我有兩個viewpager我從第二個pager刪除一個viewpager的當前頁面。並在刷到下一個位置時再次添加刪除的頁面。第二個viewpager的過程相同。問題是添加和刪除方法工作正常,如果我在onCreate中使用它們,但不能在onPageSelected中工作。和其他問題是,如果我再次在同一位置添加任何刪除的頁面,它顯示我添加頁面viewpager的當前位置。我希望頁面只添加在特定位置,但不要設置在當前位置。 以下是我的code.Any幫助將不勝感激。添加/刪除方法在onCreate工作,但不是在onPageSelected

public class MainActivity extends FragmentActivity { 
    CustomViewPager pager1,pager2; 
    List<Fragment> fragments1,fragments2; 
    public PagerAdapter adapter1; 
    public PagerAdapter1 adapter2; 
    int lostPositionRight; 
    int lostPositionLeft; 

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

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


    ArrayList<Integer> images = new ArrayList<Integer>() {{ 
     add(R.drawable.first); 
     add(R.drawable.second); 
     add(R.drawable.three); 
     add(R.drawable.four); 
     add(R.drawable.xiaomi); 
    }}; 

    ArrayList<Integer> imagesNew = new ArrayList<Integer>() {{ 
     add(R.drawable.first); 
     add(R.drawable.second); 
     add(R.drawable.three); 
     add(R.drawable.four); 
     add(R.drawable.xiaomi); 
    }}; 


    @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); 
     lostPositionLeft = 1; 
     adapter1.notifyDataSetChanged(); 

     pager2 = (CustomViewPager) findViewById(R.id.pager2); 
     fragments2 = getFragments2(); 
     adapter2 = new PagerAdapter1(getSupportFragmentManager(), fragments2); 
     pager2.setAdapter(adapter2); 
     pager2.setCurrentItem(1); 
     removeView2(0); 
     lostPositionRight = 0; 

     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(pager1.getCurrentItem()); 
       String value = fragmntDta.getTextOnTextView(); 
       int p = Integer.parseInt(value); 
       Toast toast = Toast.makeText(getApplicationContext(),"Text is " +p, Toast.LENGTH_SHORT); 
       toast.show(); 
       addView2(lostPositionRight,lostPositionRight); 
       removeView2(p); 

       adapter2.notifyDataSetChanged(); 
       lostPositionRight = p; 
      } 
      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

     pager2.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 
      @Override 
      public void onPageSelected(int position) { 
       MyImageSlider1 fragmntDta = (MyImageSlider1)findFragmentByPosition2(pager2.getCurrentItem()); 
       String value1 = fragmntDta.getTextView(); 
       Toast toast = Toast.makeText(getApplicationContext(),"Text is " +value1, Toast.LENGTH_SHORT); 
       toast.show(); 
       int p = Integer.parseInt(value1); 
       addView1(lostPositionLeft,lostPositionLeft); 
       removeView1(p); 
       lostPositionLeft = p; 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
    } 

    public void addView1(int index,int position) 
    { 
     adapter1.addView1 (index,position); 
     adapter1.notifyDataSetChanged(); 
    } 

    public void addView2(int index,int position) 
    { 
     adapter2.addView2 (index,position); 
     adapter2.notifyDataSetChanged(); 
    } 

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

    public void removeView2 (int position) 
    { 
     adapter2.removeView2(pager2, position); 
     adapter2.notifyDataSetChanged(); 
    } 



    public class PagerAdapter extends FragmentStatePagerAdapter { 
     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) 
     { 

      return POSITION_NONE; 
     } 


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

      public void addView1 (int index,int position) 
      { 
       fragments.add(index,MyImageSlider.newInstance(images.get(position),image.get(position))); 
       notifyDataSetChanged(); 
      } 

    } 

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

    public static class MyImageSlider extends Fragment { 
     int imageid; 
     String newid; 
     TextView textView; 

     public static MyImageSlider newInstance(int id,String s) 
     { 
      MyImageSlider slider=new MyImageSlider(); 
      Bundle b=new Bundle(); 
      b.putInt("imageid", id); 
      b.putString("newid", s); 
      slider.setArguments(b); 
      return slider; 
     } 
     public String getTextOnTextView(){ 
      return (String) textView.getText(); 
     } 


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

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

    public Fragment findFragmentByPosition(int position) { 
     PagerAdapter fragmentPagerAdapter = adapter1; 
     return getSupportFragmentManager().findFragmentByTag("android:switcher:" + pager1.getId() + ":" + 
         fragmentPagerAdapter.getItemId(position)); 
    } 


    public class PagerAdapter1 extends FragmentStatePagerAdapter { 
     private List<Fragment> fragment; 

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

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

     @Override 
     public int getCount() { 
      return this.fragment.size(); 
     } 

     @Override 
     public int getItemPosition (Object object) 
     { 
      return POSITION_NONE; 
     } 

     public int removeView2 (ViewPager pager, int position) 
     { 
      pager.setAdapter (null); 
      fragment.remove (position); 
      pager.setAdapter (this); 
      notifyDataSetChanged(); 
      return position; 
     } 

     public void addView2 (int index,int position) 
     { 
      fragment.add(index,MyImageSlider1.newInstance(imagesNew.get(position),imageNew.get(position))); 
      notifyDataSetChanged(); 

     } 
    } 

    private List<Fragment> getFragments2() { 
     List<Fragment> fList = new ArrayList<Fragment>(); 
     for (int i = 0; i < imagesNew.size(); i++) { 
      fList.add(MyImageSlider1.newInstance(imagesNew.get(i),imageNew.get(i))); 

     } 
     return fList; 
    } 

    public static class MyImageSlider1 extends Fragment { 
     int imageid; 
     String newid; 
     public TextView textView1; 

     public static MyImageSlider1 newInstance(int id,String s) 
     { 
      MyImageSlider1 slider=new MyImageSlider1(); 
      Bundle b=new Bundle(); 
      b.putInt("imageid", id); 
      b.putString("newid", s); 
      slider.setArguments(b); 
      return slider; 
     } 

     public String getTextView(){ 
      return (String) textView1.getText(); 
     } 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      imageid=getArguments().getInt("imageid"); 
      newid = getArguments().getString("newid"); 

     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.rightpager, container, false); 
      ImageView iv=(ImageView)view.findViewById(R.id.image2); 
      iv.setImageResource(imageid); 
      textView1 = (TextView)view.findViewById(R.id.text2); 
      textView1.setText(newid); 

      return view; 
     } 

    } 
    public Fragment findFragmentByPosition2(int position) { 
     PagerAdapter1 fragmentPagerAdapter2 = adapter2; 
     return getSupportFragmentManager().findFragmentByTag 
       ("android:switcher:" + pager2.getId() + ":" + fragmentPagerAdapter2.getItemId(position)); 
    } 
} 
+1

嘗試使用FragmentStatePagerAdapter而不是FragmentPagerAdapter –

+0

yuppp正常工作。但現在下面的方法創建問題,因爲它的使用方法FragmentPagerAdapter。這是什麼解決方案:public Fragment findFragmentByPosition(int position)PagerAdapter fragmentPagerAdapter = adapter1;返回getSupportFragmentManager()。findFragmentByTag(「android:switcher:」+ pager1.getId()+「:」+ fragmentPagerAdapter.getItemId(position)); } –

+1

你是什麼意思?最新的問題是什麼? –

回答

1

首先使用的,而不是FragmentStatePagerAdapterFragmentPagerAdapter

但是,爲了您的期望目的,您會走錯方向。

嘗試這樣做:

  1. 你說這兩種觀點尋呼機顯示同樣的事情。所以沒有必要有兩個相同的列表。每一個都足夠了。

    ArrayList<String> imageNew = new ArrayList<String>() {{ 
    add("0"); 
    add("1"); 
    add("2"); 
    add("3"); 
    add("4"); 
    }}; 
    
    
    ArrayList<Integer> images = new ArrayList<Integer>() {{ 
    add(R.drawable.first); 
    add(R.drawable.second); 
    add(R.drawable.three); 
    add(R.drawable.four); 
    add(R.drawable.xiaomi); 
    }}; 
    
  2. 爲視圖尋呼機定義onPageChangedListener。所以每次頁面改變時,你都有index。只需從兩個列表中創建一個克隆,並刪除所需的索引,然後創建一個新的適配器並將其設置爲其他視圖分頁器。

+0

沒錯......謝謝先生 –

+0

它能解決你的問題嗎? @manpreetkaur –

+0

是的,先生,特別是FragmentStatePagerAdapter對我來說就像魔術一樣工作。但現在唯一的問題是,當新頁面添加到視圖頁面時,它將當前可見視圖頁面設置爲添加頁面。我的意思是它的權利刷新片段。但我希望當新頁面添加到viewPager它不應該被設置爲viewpager當前可見頁面。我谷歌,但沒有找到任何東西 –

相關問題