2014-10-03 3 views
0

달성하고자하는 것에 대해 몇 가지 질문이 있습니다. 다른 방향으로 갈 필요가 있는지, 얼마나 더해야합니까? 여기 ViewPager를 사용하여 여러 개의보기로 하나의 조각 유지하기

내가 뭘 원하는지에 대한 모형이다 :

enter image description here

사용자는 할 수 있어야한다 :상의 화살표에

- 클릭

-swipe 왼쪽 또는 오른쪽으로 왼쪽 또는 오른쪽으로 가기

보기 모음이 고정되어 있지 않습니다 (동적이며 db에서 가져온 번호입니다)

지금 당장 ViewPager를 읽었으며, 내가하고 싶은 것을 성취하는 데 사용할 수있는 가장 가까운 도구라고 생각합니다.

//ScorePager.java 

public class ScorePager extends FragmentActivity { 

    private PagerAdapter pagerAdapter; 
    ActionBar actionbar; 
    ViewPager viewPager = null; 

    public static final String TAG ="ScorePager"; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     super.setContentView(R.layout.viewpager_view); 

     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     viewPager.setAdapter(new myAdapter(fragmentManager)); 

    } 

    private class myAdapter extends FragmentStatePagerAdapter { 

     public myAdapter(FragmentManager fragmentManager) { 

      super(fragmentManager); 
     } 

      @Override 
      public Fragment getItem(int i){ 
       Fragment fragment = null; 
      Log.d(TAG, "get Item is called " + i); 
       if (i == 0) { 
        fragment = new ScoreFragment(); 
       } 
       if (i == 1) { 
        fragment = new ScoreFragmentB(); 
       } 

       return fragment; 
      } 

      @Override 
      public int getCount() { 
      Log.d(TAG, "get Count is called"); 
       return 2; 
      } 
     } 
    } 

문제는, 내가 어떤 시점에서 너무 많은 조각을 저장해야합니다 :

여기 내 코드입니다. 예 : 보여줄 필요가있는 20 개의 새로운 뷰가 있다면 위에 코딩하는 방식으로 20 개의 조각을 가져야합니다.

지금은 두 개의 조각과 두 개의보기가 하드 코드 된 것으로 나타났습니다. 동적 조각 레이아웃을 만드는 방법이 있습니까? 다이나믹 뷰를 사용한 적이 없기 때문에 코드를 적게 사용하면서이 프로세스를보다 명확하고 깨끗하게 처리하고 싶습니다.

하나의 조각과 레이아웃보기를 가질 수 있습니까? 그렇다면 단 하나의 조각과 하나의 뷰를 사용하여 뷰 상태를 어떻게 변경합니까?

또한 Tabbed 제목 표시 줄이 ViewPager의 유일한 옵션 인 것처럼 보입니다. 이미지에서와 같은 화살표를 사용하려는 경우 여러 탭을 스크롤하지 않고 삽입 할 수있는 방법이 있습니다.

여기에서 나는 어디로 갈 수 있습니까?

+0

이 일정 조각의 숫자가 아니면 앱이 실행 중일 때이 변화하고있다. – mmlooloo

+0

조각 수가 변경됩니다. 조각의 수는 db에 저장된 숫자에 따라 달라집니다. –

답변

4
Is there a way to make a dynamic fragment layout? 
당신이 위의 작은 그림을 따라로서, 모든 뷰는 누구의 가시성 항상 위치에 따라 변경 될 수 있습니다 화살표 (을 제외하고 거의 유사 동적 조각 레이아웃 필요한 이유를 이해가 안

). 모든 조각의 레이아웃이 유사하기 때문에

Is it possible for me to have one fragment and one layout view. 

, 당신은 FragmentPagerAdapter 대신 PagerAdapter를 사용하여 시도해야합니다. FragmentPagerAdapter는 PagerAdapter의 하위 클래스입니다. 아주 간단한 예제는 here입니다.

If so, how do I change the view state with just one fragment and one view? 

instantiateItem()의 위치를 ​​기준으로보기 상태를 변경할 수 있습니다.

Also, it seems like a tabbed title bar is the only option with ViewPager, if I want to use arrows like such in the image, is there a way to insert those without having multiple tabs to scroll across. 

당신은 틀린 것입니다. 튜토리얼 here에 표시된 것처럼 탭 제목 표시 줄을 사용하지 않습니다. 귀하의 경우에는 활동 내비게이션에 사용할 두 개의 화살표를 제안하고 onPageSelected() 위치에 따라보기 페이지에서 OnPageChangeListener을 설정하여 표시 여부를 변경하십시오.당신이 ViewPager에서 조각을 사용하지 않으려면 화살표를 클릭에, 단순히 일반 뷰를 사용하여, 다음과 같은 코드를

public void moveToNextPage(View view) { 
    //it doesn't matter if you're already in the last item 
    viewPager.setCurrentItem(viewPager.getCurrentItem() + 1); 
} 

public void moveToPreviousPage(View view) { 
    //it doesn't matter if you're already in the first item 
    viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); 
} 
+0

예,보기가 매우 유사합니다. 유일한 차이점은 뷰 당 동적 텍스트 변경이 될 것이고 뷰 당 중심에 다른 이미지를 가질 계획입니다. 또한 화살표의 경우 제목 표시 줄을 숨길 수 있지만 화살표가 내장되어 있는지 궁금합니다 (아무 것도 보이지 않습니다). 그래서 화살표 이미지를 넣고 조각 인스턴스에 연결해야합니다. –

+0

예, 찾을 수있는 기본 제공 화살표가 없습니다. 화살표 이미지를 넣고 그것들의 onClick은 다음과 이전 페이지로 이동합니다. 또한 비슷한 디자인을 사용하므로 다른 조각을 사용할 필요가 없습니다. 하나의 레이아웃을 사용하고 어댑터의 위치를 ​​기반으로 컨텐츠를 조작 할 수 있습니다. – Antrromet

+0

그래서 위치를 얻은 다음 표시 여부를 변경하거나 표시 할 항목을 기반으로 스위치 또는 if-else 문을 추가하십시오. –

0

를 사용하여 viewpager의 위치를 ​​업데이트합니다. 대신 최우선 getItem

,이 방법을 사용하십시오

@Override 
public Object instantiateItem(ViewGroup collection, int position) { 
    View v = layoutInflater.inflate(...); 
    ... 
    ((ViewPager) collection).addView(v,0); 
    return v; 
} 

@Override 
public void destroyItem(ViewGroup collection, int position, Object view) { 
    ((ViewPager) collection).removeView((TextView) view); 
} 
+0

항목의 arraylist 경우 내보기 페이지에서보기를 삭제하려면 어떻게해야합니까? –

+0

만약에 무엇? 항목을 변경하면 notifyDatasetChanged 메소드로 어댑터를 업데이트해야합니다. –

관련 문제