0

안에 viewPager가 있습니다. 조각이 여러 개 있습니다.조각에서 viewPager의 단편을 제거하십시오.

providerViewPager = (ViewPager) findViewById(R.id.viewPager); 
    userRequest.add(1); 

     fragmentPagerAdapter = new FragmentStatePagerAdapter(HomeActivity.this.getSupportFragmentManager()) { 
      @Override 
      public int getCount() { 
       return userRequest.size(); 
      } 

      @Override 
      public Fragment getItem(int position) { 
       return MyFragment.newInstance(position, userRequest.get(position)); 
      } 
     }; 
     providerViewPager.setAdapter(fragmentPagerAdapter); 

userRequest는 int의 arrayList이며이 목록의 각 항목에 대해 MyFragment를 만듭니다.

MyFragment에는 각 페이지의 표시보기가 있습니다.

view.findViewById(R.id.mybutton).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       ViewPager viewPager = ((HomeActivity)getActivity()).getViewPager(); 
       FragmentStatePagerAdapter adapter = ((HomeActivity)getActivity()).getAdapter(); 
       ArrayList<Integer> ints = ((HomeActivity)getActivity()).getRequest(); 

       viewPager.removeView(view); 
       ints.remove(getArguments().getInt("position")); 
       adapter.notifyDataSetChanged(); 
      } 
     }); 

이것은 내 조각 안에있는 onClickListener입니다. 클릭 할 때이 현재 조각을 제거하고 싶습니다.

내가 볼 수 있듯이, 내 Activity에서 viewPager, 어댑터 및 arrayList를 얻었으며,이 조각을 제거하는 몇 가지 방법을 시도합니다.이 작업은하지만 중간에 요소를 제거하면 몇 가지 버그가 있습니다. 보기 호출기의 끝 부분에 도달 할 수 없습니다. 나는 그들이 조각을 제거하는 데 매우 간단하다는 것을 알고 싶다.

+1

왜 뷰 페이저에서보기를 제거 하시겠습니까? – Boukharist

+0

프래그먼트를 삭제하기 전에 뷰 호출기의 위치를 ​​설정하려고 시도하십시오. – Boukharist

+0

ViewPager가 자체 컨텐츠를 담당합니다. 무언가를 변경하려면 어댑터의 데이터 또는 현재 위치를 변경하십시오. – Eselfar

답변

0

나는이 그것을 해결 :

public void removeUserRequest(int position) { 
    if (position > 0) { 
     removeViewOnSwipe(position - 1); 
    } else { 
     removeViewOnSwipe(position); 
    } 
} 

private void removeViewOnSwipe(int position) { 
    userRequest.remove(position); 
    if (userRequest.size() == 0) { 
     providerViewPager.setVisibility(View.GONE); 
     fragmentPagerAdapter = null; 
    } else { 
     fragmentPagerAdapter = new FragmentStatePagerAdapter(HomeActivity.this.getSupportFragmentManager()) { 
      @Override 
      public int getCount() { 
       return userRequest.size(); 
      } 

      @Override 
      public Fragment getItem(int position) { 
       return ProviderSwipeListFragment.newInstance(position, userRequest.get(position)); 
      } 
     }; 
     providerViewPager.setAdapter(fragmentPagerAdapter); 
     providerViewPager.setCurrentItem(position); 
    } 
} 

removeUserRequest은 조각의 메소드 호출이다. removeViewOnSwipe : userRequest 목록에서 항목을 제거합니다. 그리고 나서 새 어댑터를 만듭니다. 그리고 마지막으로 사용자가에 많이 이동하면 이전의 조각을 볼 수 있습니다, 내가 대신 notifyDataSetChanged 사용하여 새 어댑터 recreat없이 그것을 할 시도

providerViewPager.setCurrentItem(position); 

와 정확한 새로운 위치를 설정,하지만 난 몇 가지 버그를 가지고 스 와이프 목록 끝