2012-03-14 4 views
1

사용자가 각 창에서 상호 작용할 수있는 ViewPager를 사용하려고합니다. 이 ViewPager의 경우 사용자에게 가로로 스 와이프하여 전환 창을 표시하는 자습서를 만듭니다. 사용자가 마지막 창에 도달하면 대시 보드로 이동 될 단추가 사용자에게 표시됩니다. ViewPager 내에서 버튼이 어떻게 작동하는지 이해하려고하는 몇 가지 기사를 읽었지만별로 의미가 없습니다.ViewPager 내의 버튼 사용

코드는 ViewPager 내의 창 내에있는 버튼을 클릭하면 대시 보드 활동이 시작됩니다.

내가 기사에서 본 것을에서
class MyPagerAdapter extends PagerAdapter { 

public int getCount() { 

    return 5; 
} 

public Object instantiateItem(View collection, int position) { 

    View v = new View(collection.getContext()); 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    int resId = 0; 
    switch (position) { 
    case 0: 
     resId = R.layout.tutorial_step1; 
    break; 

    case 1: 
     resId = R.layout.tutorial_step2; 

    break; 

    case 2: 
     resId = R.layout.tutorial_step3; 
    break; 

    case 3: 
     resId = R.layout.tutorial_step4; 

    break; 

    case 4: 
     resId = R.layout.tutorial_complete; 
     v = inflater.inflate(R.layout.tutorial_complete, null, false); 
     LinearLayout l = (LinearLayout) v.findViewById(R.id.llComplete); 
     Button button=(Button)l.findViewById(R.id.bTutorialComplete); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Create an intent that starts a different activity 
      } 
     }); 
     break; 
    } 
    ((ViewPager) collection).addView(v, 0); 

    return v; 

} 

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 

} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 

} 

@Override 
public Parcelable saveState() { 
    return null; 
} 
} 

, 내가 작업해야하는 코드는 다음과 같습니다 :

public Object instantiateItem(View collection, int position) { 

    View v = new View(collection.getContext()); 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    int resId = 0; 
    switch (position) { 
    case 0: 
     resId = R.layout.tutorial_step1; 
    break; 

    case 1: 
     resId = R.layout.tutorial_step2; 

    break; 

    case 2: 
     resId = R.layout.tutorial_step3; 
    break; 

    case 3: 
     resId = R.layout.tutorial_step4; 

    break; 

    case 4: 
     resId = R.layout.tutorial_complete; 
     v = inflater.inflate(R.layout.tutorial_complete, null, false); 
     LinearLayout l = (LinearLayout) v.findViewById(R.id.llComplete); 
     Button button=(Button)l.findViewById(R.id.bTutorialComplete); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Create an intent that starts a different activity 
      } 
     }); 
     break; 
    } 
    ((ViewPager) collection).addView(v, 0); 

    return v; 

} 

그것은 단지 내 case 4:입니다 여기에

는 pagerAdapter의 전체 코드입니다 switch 나는 단추가 있기 때문에 다른 레이아웃에는 이미지와 텍스트가 포함되어 있지만 상호 작용이 필요하지 않습니다.

저는 지금이 작업을 무수한 시간 동안하고 있으며 여전히이를 해결할 방법을 찾지 못했습니다. 이 일을 도와 주시면 매우 감사 할 것입니다.

+0

을 내가 어떻게 귀하의 질문에 정말 잘 모르겠어요 입니다. 단추로보기의 레이아웃을 만드는 방법을 알아 내려고하고 있습니까? 아니면 활동을 시작하려는 의도를 만드는 방법을 알아 내려고하고 있습니까? 또는 다른 것? 코드는 지금까지 괜찮아 보인다. 레이아웃을 제공 할 수 있고 오류를 나타내는 LogCat을 제공 할 수 있다면 질문에 답변하는 데 도움이 될 것입니다. – louielouie

+0

switch 문에 레이아웃을 제공했지만 레이아웃 중 하나에 버튼이 있습니다. 그 버튼이 활동을 시작하기위한 의도를 만들길 원합니다. 나는 의도를 만들고 스위치 문 내에서 활동을 시작하려고 시도했지만 컴파일러가이를 받아 들일 수는 없으며이 인 텐트 인수와 startActivity 메소드를 인식하지 못합니다. – kibria3

답변

4
final Context context = collection.getContext(); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      context.startActivity(new Intent(context, Dashboard.class)); 
     } 
    }); 
    break; 

p.s. 당신은 방법부터 collectionfinal을 할 수 없습니다 instantiateItem@Override

힌트입니다 : 당신이 다른 페이지를 만들고 싶어 당신이 switch(position)에 코드를 넣을 수 있습니다 :

LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE) 
View v = null; 
switch (position) { 
    case 0: 
     v = inflater.inflate(R.layout.somelayout); 
     Button btn = (Button) v.findViewById(R.id.somebutton); 
     btn.setText("btn"); 
    break; 

    case 1: 
     v = inflater.inflate(R.layout.someotherlayout); 
     TextView tv = (Button) v.findViewById(R.id.sometextview); 
     tv.setText("btn"); 
    break; 
} 

((ViewPager) collection).addView(v, 0); 
return v; 
+0

나는 이것에 대한 답을 줄뿐만 아니라 아래의 답을 주겠다. 도움을 주셔서 감사합니다. 정말 고맙습니다. – kibria3

+1

이것은 완벽하게 작동했습니다. 정말 고마워요! – kibria3

1

의도를 작성한 다음 그로 활동을 시작하는 것처럼 보입니다. 이미 액세스하고있는 "컬렉션"의 컨텍스트를 사용할 수 있습니다. 다시 코드를 작성해야하는 코드는 다음과 같습니다.

public void onClick(View v) { 
    Context context = collection.getContext(); 
    Intent intent = new Intent(context, DashboardActivity.class); 
    context.startActivity(intent); 
} 

아마도 컬렉션을 최종으로 설정해야 할 것입니다.

+0

아하, 고맙습니다. – kibria3

+0

시도해 보았습니다. 문제가 있었지만 이해하고 직접 사용해 보았습니다. 도움을 주셔서 감사합니다! – kibria3