|
public class startApp extends Activity { // 뷰페이저 용도로 public String[] CallListString = new String[] { "리스트 내용1", "리스트 내용1", "리스트 내용1", "리스트 내용1", "리스트 내용1", "리스트 내용1", "리스트 내용1", };
int mNum; private final int COUNT=5; //아이템 갯수 private int mPrevPosition; //이전에 선택되었던 포지션 값 private ViewPager mPager; //뷰 페이저 private LinearLayout mPageMark; //현재 몇 페이지 인지 나타내는 뷰 private boolean isAnimated; //애니메이션 효과 사용 여부 //뷰 이미지 네비게이터 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); startActivity(new Intent(this, logo.class)); setContentView(R.layout.activity_start_app);
mPageMark = (LinearLayout)findViewById(R.id.page_mark); //상단의 현재 페이지 나타내는 뷰
mPager = (ViewPager)findViewById(R.id.pager); //뷰 페이저 mPager.setAdapter(new BkPagerAdapter(getApplicationContext())); //PagerAdapter로 설정 //mPager.setAdapter(new CustomPagerAdapter(getApplicationContext())); //PagerAdapter로 설정 mPager.setOnPageChangeListener(new OnPageChangeListener() { //아이템이 변경되면, gallery나 listview의 onItemSelectedListener와 비슷 //아이템이 선택이 되었으면 @Override public void onPageSelected(int position) { mPageMark.getChildAt(mPrevPosition).setBackgroundResource(R.drawable.page_not); //이전 페이지에 해당하는 페이지 표시 이미지 변경 mPageMark.getChildAt(position).setBackgroundResource(R.drawable.page_select); //현재 페이지에 해당하는 페이지 표시 이미지 변경 mPrevPosition = position; //이전 포지션 값을 현재로 변경 } @Override public void onPageScrolled(int position, float positionOffest, int positionOffsetPixels) {} @Override public void onPageScrollStateChanged(int state) {} }); initPageMark(); //현재 페이지 표시하는 뷰 초기화 isAnimated = true; //기본적으로 애니메이션 사용. } //======================================>>>> //상단의 현재 페이지 표시하는 뷰 초기화 //뷰 네비게이터 private void initPageMark(){ for(int i=0; i<COUNT; i++) { ImageView iv = new ImageView(getApplicationContext()); //페이지 표시 이미지 뷰 생성 iv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//첫 페이지 표시 이미지 이면 선택된 이미지로 if(i==0){ iv.setBackgroundResource(R.drawable.page_select); } else{ //나머지는 선택안된 이미지로 iv.setBackgroundResource(R.drawable.page_not); } //LinearLayout에 추가 mPageMark.addView(iv); } mPrevPosition = 0; //이전 포지션 값 초기화 } //======================================>>>> //Pager 아답터 구현 실질적인 뷰 제작 private class BkPagerAdapter extends PagerAdapter{ public Context mContext; //public LayoutInflater mInflater; public BkPagerAdapter( Context con) { super(); mContext = con; } @Override public int getCount() { return COUNT; } //여기서는 2개만 할 것이다.
//뷰페이저에서 사용할 뷰객체 생성/등록 @Override public Object instantiateItem(View pager, int position) { View v = null; v = new View(startApp.this. getApplicationContext()); pager.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final LayoutInflater inflater = (LayoutInflater) startApp.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch(position){ case 0: // 메인메뉴, XML로 최대한 레이아웃 짤것 코드제외 v = inflater.inflate(R.layout.activity_menu_home, null); break; case 1: // 웹뷰 부분 WebView mWeb; mWeb = (WebView)findViewById(R.id.web); mWeb.setWebViewClient(new MyWebClient()); WebSettings set = mWeb.getSettings(); set.setJavaScriptEnabled(true); set.setBuiltInZoomControls(true); mWeb.loadUrl("http://m.myung.co.kr/"); v = inflater.inflate(R.layout.activity_menu_webview, null); break; case 2: // CallList 리스트뷰 부분 ListView CallLists = (ListView)findViewById(R.id.call_list); CallLists.setAdapter(new ArrayAdapter<String>(startApp.this, android.R.layout.simple_list_item_1, CallListString)); v = inflater.inflate(R.layout.tab_pr_call, null); break; case 3: //
break; case 4: //
break; } ((ViewPager)pager).addView(v ,0); return v; } //웹뷰 class MyWebClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl("url); return true; } } //뷰 객체 삭제. @Override public void destroyItem(View pager, int position, Object view) { ((ViewPager)pager).removeView((View)view); } // instantiateItem메소드에서 생성한 객체를 이용할 것인지 @Override public boolean isViewFromObject(View view, Object obj) { return view == obj; } @Override public void finishUpdate(View arg0) {} @Override public void restoreState(Parcelable arg0, ClassLoader arg1) {} @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) {} }
} |
일단 로그를 올려주시면 좀 더 정확하게 분석 할 수 있을텐데요
제가 의심가는 부분은
mWeb = (WebView)findViewById(R.id.web);와 ListView CallLists = (ListView)findViewById(R.id.call_list);
저 두곳입니다.
findViewById를 사용하셨는데 저렇게 되면 액티비티에 등록한 activity_start_app.xml 에서 해당 뷰들을 찾을 텐데요.
저 2개의 뷰가 정의되어 있는지 의심되고요
또 저 2개의 뷰가 정의되어 있다고 하더라도 이미 다른 레이아웃의 자식 뷰로 등록이 되어 있는 뷰를 가지고
다시 뷰 페이저에 자식 뷰로 넣으면 exception이 발생하겠죠.