2016-12-09 20 views
1

私は2つのビューページを持っています。私は2つ目のページャから1つのビューページの現在のページを削除しています。次の位置にスワイプしたときに再び削除ページを追加します。 2番目のビューページの場合と同じプロセスです。 onCreateでそれらを使用していてもonPageSelectedで作業していない場合は、問題を追加して削除するのが問題です。他の問題は、同じ位置に削除されたページをもう一度追加すると、ビューページャの現在の位置にページが追加されていることがわかります。私はページがちょうどその特定の位置に追加したいが、現在の位置に設定しない。 以下は私のコードです。何か助けに感謝します。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

FragmentPagerAdapter –

+0

yupppの代わりにFragmentStatePagerAdapterを使用してみてください。しかし今は、FragmentPagerAdapterのメソッドを使用しているので、問題を作成するメソッドに従います。パブリックフラグメントfindFragmentByPosition(int position){ PagerAdapter fragmentPagerAdapter = adapter1; return getSupportFragmentManager()。findFragmentByTag( "android:switcher:" + pager1.getId()+ ":" + " fragmentPagerAdapter.getItemId(position)); } –

+1

正確にはどういう意味ですか?その問題は何ですか? –

答えて

1

まず第一には、代わりにFragmentStatePagerAdapterFragmentPagerAdapterを使用しています。

しかし、あなたの望む目的のために、あなたは間違った方向に行きます。

はこれをやってみてください。

  1. あなたは、両方のビューのポケベルが同じことを示していると述べました。したがって、同じリストが2つある必要はありません。それぞれから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

right ...ありがとうございます –

+0

あなたの問題を解決しますか? @manpreetkaur –

+0

はい、私は特にFragmentStatePagerAdapterは魔法のように動作します。しかし、今私が持っている問題は、新しいページが表示ページに追加されたときに、現在表示されているビューページページとして追加されたページを設定することだけです。私はその断片のリフレッシュを意味します。しかし、新しいページがviewPagerに追加されたときに、ビューページの現在の表示ページとして設定しないでください。私はグーグルだが見つからない –

関連する問題