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

초보) fragment로 구성한 탭 이동 시 이전 탭 화면 유지 질문

0 추천
fragment로 탭을 3개 구성하였고 첫번째 탭에서 다른 탭이나 기능(검색, 설정) 화면으로 이동 후 다시 첫번째 탭으로 이동 시, 첫번째 탭에서 마지막으로 보고 있던 화면이 유지되게 하고 싶은데 imageview와 textview에 설정한 초기값이 보여집니다.
fragment 첫번째 화면에 해당하는 아래 코드와 MainActivity 코드 상 문제가 되는 부분이 어디인지 알려주시면 감사 드리겠습니다!(반복되는 긴 부분은 ★ 문자로 자체 생략했습니다)

 
//fragement1
public class Fragment1 extends Fragment {
    ★변수 선언

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment1, container, false);

        imageView = (ImageView) rootView.findViewById(R.id.imageView);
        imageView2 = (ImageView) rootView.findViewById(R.id.imageView2);
        imageView3 = (ImageView) rootView.findViewById(R.id.imageView3);

        textView2 = (TextView) rootView.findViewById(R.id.textView2);
        textView3 = (TextView) rootView.findViewById(R.id.textView3);
        textView4 = (TextView) rootView.findViewById(R.id.textView4);

        button = (Button) rootView.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View V) {
                int nowValue = progressBar.getProgress();
                int maxValue = progressBar.getMax();

                if(maxValue == nowValue) {
                    nowValue = 0;

                } else {
                    progressBar.setVisibility(View.VISIBLE);
                    nowValue = nowValue + 1;
                    textView.setText("진행율 : " + nowValue + "/38명");

                ★동작 선언(버튼 클릭 시 마다 imageview, textview 내용이 순차적으로 변경)                   

                if(nowValue == 0) {
                    Resources res = getResources();

                    progressBar.setVisibility(View.INVISIBLE);

                    bitmap1 = (BitmapDrawable) res.getDrawable(R.drawable.check);
                    imageView.setImageDrawable(bitmap1);
                    textView.setText("확인 완료!");
                    textView.setTextSize(30);
                    textView2.setText(null);
                    textView3.setText(null);
                    textView4.setText(null);
                    imageView2.setVisibility(View.INVISIBLE);
                    imageView3.setVisibility(View.INVISIBLE);
                    button.setVisibility(View.INVISIBLE);
                }
                progressBar.setProgress(nowValue);
                button.setText("다음");
            }
        });

        progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar);
        textView = (TextView) rootView.findViewById(R.id.textView);

        return rootView;
    }
}

 

//mainactivity

public class MainActivity extends AppCompatActivity {
    Fragment1 fragment1;
    Fragment2 fragment2;
    Fragment3 fragment3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayShowTitleEnabled(true);

        fragment1 = new Fragment1();
        fragment2 = new Fragment2();
        fragment3 = new Fragment3();

        getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment1).commit();

        TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
        tabs.addTab(tabs.newTab().setIcon(R.drawable.people2));
        tabs.addTab(tabs.newTab().setIcon(R.drawable.list2));
        tabs.addTab(tabs.newTab().setIcon(R.drawable.heart));

        tabs.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_BUTTON_PRESS) {
                    return true;
                } else if (event.getAction() == MotionEvent.ACTION_BUTTON_RELEASE) {
                    return false;
                }
                return true;
            }
        });

        tabs.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                int position = tab.getPosition();
                Log.d("MainActivity", "선택된 탭 : " + position);

                Fragment selected = null;
                if (position == 0) {
                    selected = fragment1;
                } else if (position == 1) {
                    selected = fragment2;
                } else if (position == 2) {
                    selected = fragment3;
                }

                getSupportFragmentManager().beginTransaction().replace(R.id.container, selected).commit();

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) { }

            @Override
            public void onTabReselected(TabLayout.Tab tab) { }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int curId = item.getItemId();
        switch(curId) {
            case R.id.menu_search:
                Intent myIntent = new Intent(getApplicationContext(), SearchActivity.class);
                startActivity(myIntent);
                break;
            case R.id.menu_setting:
                Toast.makeText(this, "설정할 기능이 없습니다.", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}
msyonsei (250 포인트) 님이 2016년 6월 21일 질문
msyonsei님이 2016년 6월 21일 수정

1개의 답변

0 추천
저는 ViewPager 사용하는데, ViewPager 같은 경우는

viewPager.setOffscreenPageLimit(3);   하면 3개에 한해서 지워지지 않습니다.
DevAndC (680 포인트) 님이 2016년 6월 21일 답변
...