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

(초보개발자) 다른 Activity에서 버튼을 클릭시 원하는 Tab으로 이동 하는방법에 대해서 질문입니다. [closed]

0 추천

안녕하세요 초보 개발자 입니다.

예를 들어 A.Activity에서 버튼을 클릭시 B.Activity로 넘어가 A.Activity선택한 탭 구성 화면을 보여주고 싶습니다.  제가 구현한 방법은 putExtra에 tablayout item 번호를 지정하여 ViewPager Adapter에 번호를 넣어 띄우는 방식을 사용해봤으나 당연하게도 tabIdx에 넘어온 값만 Viewpager Adapter에 저장되어 모든탭이 똑같이 보입니다. 

 

몇날 며칠을 고민을 해봐도 방법이 나오지 않아 선배님들께 조언을구합니다.

감사합니다.

 

[소스코드]

putExtra를 사용하여 번호를 Tablayout이 있는 class로 넘깁니다

private void wordMap1(){
        Intent my_word = new Intent(HomeActivity.this, Word_Map_table.class);
        my_word.putExtra("tabIdx", 0);
        startActivity(my_word);
    }

    private void wordMap2(){
        Intent my_word = new Intent(HomeActivity.this, Word_Map_table.class);
        my_word.putExtra("tabIdx", 1);
        startActivity(my_word);
    }

    private void wordMap3(){
        Intent my_word = new Intent(HomeActivity.this, Word_Map_table.class);
        my_word.putExtra("tabIdx", 2);
        startActivity(my_word);
    }

 

번호를 받는 class입니다.  

Word_Map_Page_Adapter word_map_page_adapter = new Word_Map_Page_Adapter(getSupportFragmentManager(), tabLayout.getTabCount(), tabIdx);

이부분에서 전달받은 번호를 Adapter로 넘겨줍니다.

 

 mContext = getApplicationContext();
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);

        //탭 텍스트
        tabLayout.addTab(tabLayout.newTab().setCustomView(createTabView("탭 1", 0)));
        tabLayout.addTab(tabLayout.newTab().setCustomView(createTabView("탭 2", 1)));
        tabLayout.addTab(tabLayout.newTab().setCustomView(createTabView("탭 3", 2)));

        //main에서 탭 idx값 넘어옴
        tabIdx = getIntent().getIntExtra("tabIdx", 0);
        Log.d("tabIdxChk", tabIdx + "");

        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        Word_Map_Page_Adapter word_map_page_adapter = new Word_Map_Page_Adapter(getSupportFragmentManager(), tabLayout.getTabCount(), tabIdx);

        viewPager.setAdapter(word_map_page_adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {


            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

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

            }

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

            }
        });

        init();

    }



    private View createTabView(String tabName, int position) {

        View tabView = LayoutInflater.from(mContext).inflate(R.layout.tab_custom, null);
        TextView txt_name = (TextView) tabView.findViewById(R.id.txt_name);
        txt_name.setText(tabName);

        if (position == 0){
            ((ImageView) tabView.findViewById(R.id.Tab_img)).setImageResource(R.drawable.tabbtn01);

        }
        if (position == 1){
            ((ImageView) tabView.findViewById(R.id.Tab_img)).setImageResource(R.drawable.tabbtn02);

        }
        if (position == 2){
            ((ImageView) tabView.findViewById(R.id.Tab_img)).setImageResource(R.drawable.tabbtn03);

        }

        return tabView;

    }

 

ViewPagerAdapter입니다.

public Word_Map_Page_Adapter(FragmentManager fm, int tabCount, int tabIdx) {
        super(fm);
        this.tabCount = tabCount;
        this.tabIdx = tabIdx;
    }

    @Override
    public Fragment getItem(int i) {
        Log.d("i",i+"");
        Log.d("Tabidx",tabIdx+"");

        if (tabIdx == 0){
            Fragment_Word_Map_One tabOne = new Fragment_Word_Map_One();
            return tabOne;
        }else if(tabIdx == 1) {
            Fragment_Word_Map_Two tabTwo = new Fragment_Word_Map_Two();
            return tabTwo;
        }else if(tabIdx == 2){
            Fragment_Word_Map_Three tabThree = new Fragment_Word_Map_Three();
            return tabThree;
        }
        return null;
    }

    @Override
    public int getCount() {
        return tabCount;
    }
}

 

질문을 종료한 이유: 해결
bomkyu (260 포인트) 님이 2020년 4월 13일 질문
bomkyu님이 2020년 4월 20일 closed

1개의 답변

0 추천

자답입니다.

setCurrentItem으로 해결 했습니다.

if (tabIdx == 0){
    viewPager.setCurrentItem(0);
}else if(tabIdx == 1){
    viewPager.setCurrentItem(1);
}else {
    viewPager.setCurrentItem(2);
}
bomkyu (260 포인트) 님이 2020년 4월 16일 답변
...