마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

viewpager에 이미지뷰 띄우는게 잘 안되네요...

0 추천

HelpFragment에서 viewpager 기능을 사용하여 이미지를 보여주려하는데요

처음 진입시에는 잘 동작하지만 다른 fragment로 이동하여 재진입하게 되면 이미지를 띄우지 않는 페이지가 발생합니다

HelpFragment는 navigationdrawer 를 이용하여 환경 설정 fragment 진입 후 리스트 클릭 시 불려지는 fragment 입니다

또한 navigationdrawer 메뉴 아이콘을 < up아이콘으로 바꾸는게 setDisplayHomeAsUpEnabled(true) 함수로 알고 있는데

함수를 호출하여도 그대로 메뉴 아이콘으로 남아있습니다 

이 두가지가 해결이 안되고 있어 힘드네요...ㅠㅠ 고수분들의 조언 부탁 드립니다

package kr.co.mycardiary;

import java.lang.reflect.Field;

import android.app.ActionBar;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

public class HelpFragment extends Fragment {

	private	ViewPager 			m_ViewPager;
	private	HelpPagerAdapter 	m_PagerAdapter;	

	public static HelpFragment newInstance(int pageNumber) {
		HelpFragment fragment = new HelpFragment();
		Bundle args = new Bundle();
		args.putInt("page", pageNumber);
		fragment.setArguments(args);
		return fragment;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragment_help, null);

		view.setFocusableInTouchMode(true);
		view.requestFocus();
		view.setOnKeyListener(new View.OnKeyListener() {

			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				// TODO Auto-generated method stub
				Log.d("dblog", "onKey = " + keyCode);
				if( keyCode == KeyEvent.KEYCODE_BACK){
					FragmentManager fragmentManager = getFragmentManager();
					fragmentManager.addOnBackStackChangedListener(null);
					fragmentManager.beginTransaction().replace(R.id.container,	SetupFragment.newInstance()).commit();	
					return true;
				}else{
					return false;
				}
			}
		});
		
		ActionBar actionBar = getActivity().getActionBar();
		actionBar.setDisplayHomeAsUpEnabled(true);
		actionBar.setTitle("도움말");

		m_ViewPager = (ViewPager) view.findViewById(R.id.pager);
		m_PagerAdapter = new HelpPagerAdapter(getFragmentManager());
		m_ViewPager.setAdapter(m_PagerAdapter);

		return view;
	}

	@Override
	public void onActivityCreated(@Nullable Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onActivityCreated(savedInstanceState);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()){
		case android.R.id.home:
			getActivity().finish();
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public void onDetach() {
		super.onDetach();
		Log.d("dblog", "onDetach()");
		try {
			Field childFragmentManager = Fragment.class
					.getDeclaredField("mChildFragmentManager");
			childFragmentManager.setAccessible(true);
			childFragmentManager.set(this, null);
		} catch (NoSuchFieldException e) {
			throw new RuntimeException(e);
		} catch (IllegalAccessException e) {
			throw new RuntimeException(e);
		}
	}

	public class HelpPagerAdapter extends FragmentPagerAdapter {


		public HelpPagerAdapter(FragmentManager fm) {
			super(fm);
			// TODO Auto-generated constructor stub
		}

		@Override
		public Fragment getItem(int position) {
			Log.d("mPageNumber", "getItem()" + position);
			return HelpPageFragment.newInstance(position);
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return 7;
		}
	}
}
package kr.co.mycardiary;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;


public class HelpPageFragment extends Fragment {
//	private static ImageView mImageArray[] = new ImageView[7];
//	private int mCnt =0;
	private int mPageNumber;

	public static HelpPageFragment newInstance(int pageNumber) {
		HelpPageFragment fragment = new HelpPageFragment();
		Bundle args = new Bundle();
		args.putInt("page", pageNumber);
		fragment.setArguments(args);
		return fragment;
	}


	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
//		mPageNumber = getArguments().getInt("page");
		mPageNumber = getArguments() != null ? getArguments().getInt("page") : 0;	// 뷰페이저의 position값을  넘겨 받음
	}


	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.adaper_help, container,
				false);
		//			mCnt = getArguments().getInt("position");
		Log.d("HelpListAdapter", "PlaceholderFragment.onCreateView()===mPageNumber=======" + mPageNumber);

//		mImageArray[mPageNumber] = (ImageView) rootView.findViewById(R.id.imageView);

//		((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help1);
		
		switch (mPageNumber) {
		case 0:
			Log.d("position", "mPageNumber" + mPageNumber);
//			mImageArray[mPageNumber].setBackgroundResource(R.drawable.help1);
			((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help1);
			break;
		case 1:
			Log.d("position", "mPageNumber" + mPageNumber);
			((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help2);
//			mImageArray[mPageNumber].setBackgroundResource(R.drawable.help2);
			break;
		case 2:
			Log.d("position", "mPageNumber" + mPageNumber);
			((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help3);
//			mImageArray[mPageNumber].setBackgroundResource(R.drawable.help3);
			break;
		case 3:
			Log.d("position", "mPageNumber" + mPageNumber);
			((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help4);
//			mImageArray[mPageNumber].setBackgroundResource(R.drawable.help4);
			break;
		case 4:
			Log.d("position", "mPageNumber" + mPageNumber);
			((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help5);
//			mImageArray[mPageNumber].setBackgroundResource(R.drawable.help5);
			break;
		case 5:
			Log.d("position", "mPageNumber" + mPageNumber);
			((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help6);
//			mImageArray[mPageNumber].setBackgroundResource(R.drawable.help6);
			break;
		case 6:
			Log.d("position", "mPageNumber" + mPageNumber);
			((ImageView) rootView.findViewById(R.id.imageView)).setBackgroundResource(R.drawable.help7);
//			mImageArray[mPageNumber].setBackgroundResource(R.drawable.help7);
			break;
		}
		return rootView;
	}
}

 

기수님 (510 포인트) 님이 2014년 9월 19일 질문
아.. 일단 viewPager는 해결하였네요 HelpPagerAdater를 생성할 때 getFragmentManager() 가 아닌 getChildFragmentManager() 를 이용하니 되네요 Fragment 내에서 viewPager 를 쓰려면 getChildFragmentManager() 를 이용해야 하나보네요..
액션바의 < up 버튼 변경은 뭘해도 되지가 않네요 ㅠㅠ

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...