0

사용자에게 팁을 표시하기 위해 조각을 만들려고합니다. 프래그먼트의 createView 메소드는 ViewPager를 리턴하고 AsyncTask를 통해 PagerAdapter를 설정한다. 이 단편은 사용자가 버튼을 누를 때 FragmentActivity에 추가됩니다. 사용자가 동일한 버튼을 다시 누르는 마지막 항목에 도달하면이 부분이 FragmentActivity에서 제거됩니다. android.R.id.content에 의해 식별 된 FrameLayout에 조각을 추가한다는 점에 유의해야합니다.ViewPager가 제거 후 FrameLayout에 다시 추가 된 항목을로드하지 않습니다.

좋아, 처음 버튼을 누르면 예상대로 작동합니다. 그러나 두 번째로 버튼을 누르면 ViewPager가 나타나지 않습니다. View Hierarchy를 사용하여 일어나는 일을 볼 때, ViewPager가 올바른 위치에 있지만 항목이없는 것을 볼 수 있습니다. 디버깅을하고 PagerAdapter의 getCount()가 호출되었지만 getItem이 호출되지 않는다는 점에 유의하십시오.

FragmentTransaction fragmentTransaction = fragmentActivity.getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.add(android.R.id.content, this, TAG); 
fragmentTransaction.commit(); 

그리고 조각이 방법을 제거 :

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.remove(tipManagerFragment); 
fragmentTransaction.commit(); 

이는 내가 조각이 방법을 추가

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View tipsView = inflater.inflate(R.layout.tip_manager_layout, container, false); 
    this.tipPagerAdapter = new TipPagerAdapter(getFragmentManager(), getArguments().getIntArray(TIP_LAYOUT_IDS_KEY)); 
    this.viewPager = (ViewPager) tipsView.findViewById(R.id.tip_pager); 
    this.viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageSelected(int position) { 
     if(position == (tipPagerAdapter.getCount()-1)){ 
     stop(); 
     } 
    } 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
    }); 
    // Workaround to set the PagerAdapter within a fragment transaction 
    new SetViewPagerAdapterTask().execute(); 
    return tipsView; 
} 

:

내 조각의 createView 방법입니다 조각에 의해 팽창 된 레이아웃 :

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tip_pager" 
    android:layout_width="fill_parent" 
    android:layout_height="175dp" 
    android:layout_gravity="center_horizontal|bottom" 
    android:paddingBottom="2dp" /> 

누군가이 문제를 해결해 줄 수 있습니까?

편집 : 잠시 동안

, 나는 활동에 추가 한 후 조각의 표시 및 숨기기 방법을 사용하고 있습니다. 그러나 올바른 접근 방식은 아닙니다. 왜 ViewPager로 단편을 다시 추가 할 수 없는지 이해할 수 없습니다. ViewPager가 올바르게 추가되고 제거되지만 두 번째로는 아무 것도 표시되지 않습니다.

답변

2

오랫동안 내 문제에 대해 생각한 후에 다음과 같은 생각이 들었습니다. 어쩌면 문제는 ViewPager가있는 조각을 제거한다는 사실과 관련이 있습니다. 그러나 내가 사용하는 조각을 제거하지 않을 것입니다. ViewPager. 그런 다음, FragmentManager에서 이러한 조각이 계속되고 새 ViewPager에서 이러한 조각을 사용하려고하면 이상한 일이 발생합니다.

그래서 모든 조각을 제거하기 시작했습니다. 어댑터가 컨텐츠를 만들 tipFragments을 사용

public void destroy(FragmentTransaction fragmentTransaction){ 
    for(Fragment tipFragment : tipFragments){ 
     fragmentTransaction.remove(tipFragment); 
    } 
} 

이렇게하려면 내 FragmentPagerAdapter에서이 방법을 방법을 만들었습니다. 그래서, 나는 fragmentTransaction을 매개 변수로 얻었고 모든 조각을 제거합니다. 나는 모든 조각을 제거

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
tipPagerAdapter.destroy(fragmentTransaction); 
fragmentTransaction.remove(TipManagerFragment.this); 
fragmentTransaction.commit(); 

이 방법 나는 다시 ViewPager을 가지고 조각을 추가 할 때, 모든 것이 잘 작동 : 내 조각을 제거 할 때, 나는이 코드를 사용합니다.

관련 문제