2016-09-28 1 views
1

나는 TabLayout과 viewpager를 사용하여 각 탭 사이를 스 와이프하고 있는데, 예를 들어 tab3에 위치시키고 tab3에서 뭔가를 클릭하면 문제가 생깁니다. & 뭔가 새로운 정보로 이동하고 내 문제는 제가 가고 싶을 때입니다. 다시 탭 3에 특정하지만, 다시 탭 3으로 돌아 가지 않고 탭 1로 직접 되돌아 간다. 그리고 나는 이미 검색하지만 여전히 해결되지는 않는다.onBackPressed를 사용하여 활동 안드로이드에서 특정 탭으로 다시 설정하는 방법?

작업을 탭에서 조각을 사용하여 특정 탭으로 되돌리는 방법은 무엇입니까?

저는 이것을 첫 번째 호출 TabFragment에 사용하고 있습니다.

public class MainActivity extends AppCompatActivity{ 

DrawerLayout mDrawerLayout; 
NavigationView mNavigationView; 
FragmentManager mFragmentManager; 
FragmentTransaction mFragmentTransaction; 

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

    // session manager 
    session = new SessionManager(getApplicationContext()); 

    if (!session.isLoggedIn()) { 
     logoutUser(); 
    } 



    mFragmentManager = getSupportFragmentManager(); 
    mFragmentTransaction = mFragmentManager.beginTransaction(); 
    mFragmentTransaction.replace(R.id.containerView, new TabFragment()).commit(); 

}} 

다음은 설정 탭입니다.

공용 클래스 TabFragment 전에 다시 내가 원하는 무엇을 조각 {

public static TabLayout tabLayout; 
public static ViewPager viewPager; 
public static int int_items = 4 ; 
public static Toolbar toolbar; 

private int[] icons_off = { 
     R.mipmap.ic_panorama_white_36dp, 
     R.mipmap.ic_notifications_active_white_36dp, 
     R.mipmap.ic_inbox_white_36dp, 
     R.mipmap.ic_tag_faces_white_36dp 
}; 
private int[] icons_on = { 
     R.mipmap.ic_panorama_black_36dp, 
     R.mipmap.ic_notifications_active_black_36dp, 
     R.mipmap.ic_inbox_black_36dp, 
     R.mipmap.ic_tag_faces_black_36dp 
}; 

private String[] title_tab = { 
     "", 
     "Tour", 
     "Draft", 
     "My Profile" 
}; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    /** 
    *Inflate tab_layout and setup Views. 
    */ 
    View x = inflater.inflate(R.layout.tab_layout,null); 
    tabLayout = (TabLayout) x.findViewById(R.id.tabs); 
    viewPager = (ViewPager) x.findViewById(R.id.viewpager); 

    /** 
    *Set an Apater for the View Pager 
    */ 
    viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 


    toolbar = (android.support.v7.widget.Toolbar) x.findViewById(R.id.tool_bar); 
    ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); 
    ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false); 
    toolbar.setLogo(R.mipmap.ic_landscape_white_36dp); 
    setHasOptionsMenu(true); 

    /** 
    * Now , this is a workaround , 
    * The setupWithViewPager dose't works without the runnable . 
    * Maybe a Support Library Bug . 
    */ 

    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 

      tabLayout.getTabAt(0).setIcon(icons_on[0]).select(); 
      tabLayout.getTabAt(1).setIcon(icons_off[1]); 
      tabLayout.getTabAt(2).setIcon(icons_off[2]); 
      tabLayout.getTabAt(3).setIcon(icons_off[3]); 
      viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
       @Override 
       public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

       } 

       @Override 
       public void onPageSelected(int position) { 
        switch (position) { 
         case 0: 
          toolbar.setLogo(R.mipmap.ic_landscape_white_36dp); 
          toolbar.setTitle(Html.fromHtml("<font color='#ffffff'>"+title_tab[position]+"</font>")); 
          tabLayout.getTabAt(0).setIcon(icons_on[0]); 
          tabLayout.getTabAt(1).setIcon(icons_off[1]); 
          tabLayout.getTabAt(2).setIcon(icons_off[2]); 
          tabLayout.getTabAt(3).setIcon(icons_off[3]); 
          break; 
         case 1: 
          toolbar.setLogo(null); 
          toolbar.setTitle(Html.fromHtml("<font color='#ffffff'>"+title_tab[position]+"</font>")); 
          tabLayout.getTabAt(0).setIcon(icons_off[0]); 
          tabLayout.getTabAt(1).setIcon(icons_on[1]); 
          tabLayout.getTabAt(2).setIcon(icons_off[2]); 
          tabLayout.getTabAt(3).setIcon(icons_off[3]); 
          break; 
         case 2: 
          toolbar.setLogo(null); 
          toolbar.setTitle(Html.fromHtml("<font color='#ffffff'>"+title_tab[position]+"</font>")); 
          tabLayout.getTabAt(0).setIcon(icons_off[0]); 
          tabLayout.getTabAt(1).setIcon(icons_off[1]); 
          tabLayout.getTabAt(2).setIcon(icons_on[2]); 
          tabLayout.getTabAt(3).setIcon(icons_off[3]); 
          break; 
         case 3: 
          toolbar.setLogo(null); 
          toolbar.setTitle(Html.fromHtml("<font color='#ffffff'>"+title_tab[position]+"</font>")); 
          tabLayout.getTabAt(0).setIcon(icons_off[0]); 
          tabLayout.getTabAt(1).setIcon(icons_off[1]); 
          tabLayout.getTabAt(2).setIcon(icons_off[2]); 
          tabLayout.getTabAt(3).setIcon(icons_on[3]); 
          break; 
        } 
       } 

       @Override 
       public void onPageScrollStateChanged(int state) { 

       } 

      }); 


     } 
    }); 

    return x; 

} 

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_main, menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_search) { 
     //Toast.makeText(getContext(), "Chat Clicked !", Toast.LENGTH_SHORT).show(); 

     Intent in = new Intent(getActivity(), SearchActivity.class); 
     in.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
     startActivity(in); 
    } else if(id == R.id.action_setting){ 
     //Toast.makeText(getContext(), "Chat Clicked !", Toast.LENGTH_SHORT).show(); 

     Intent in = new Intent(getActivity(), SettingsActivity.class); 
     in.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
     startActivity(in); 
    } 

    return super.onOptionsItemSelected(item); 
} 

class MyAdapter extends FragmentPagerAdapter{ 

    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    /** 
    * Return fragment with respect to Position . 
    */ 

    @Override 
    public Fragment getItem(int position) 
    { 
     switch (position){ 
      case 0 : return new Feed(); 
      case 1 : return new Tour(); 
      case 2 : return new Project(); 
      case 3 : return new MyProfile(); 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 

     return int_items; 

    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     /* 
     switch (position){ 
      case 0 : 
       return "Primary"; 
      case 1 : 
       return "Social"; 
      case 2 : 
       return "Updates"; 
      case 3 : 
       return "User"; 
     } 
     */ 
     return null; 
    } 

    public boolean onTouch(View v, MotionEvent event) { 
     return true; 
    } 

}} 

내 마지막 위치를 확장합니다. 새 활동을 작성하기 전에

public class TourActivity extends AppCompatActivity { 
    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     // here's where i want to back to specific tab 
    } 

답변

1

, 다시 탐색 할 때, setCurrentItem(position);로보기 호출기 위치를 설정, 그 후, viewpager의 위치를 ​​저장

먼저, 기타를 시작하기 전에 당신의 위치를 ​​저장 활동, 그것은 sharedPreferences 또는 다른 뭔가가 될 수 있습니다.

둘째, onResume의 탭 조각에서 sharedPreferences에서 위치를 읽고 viewpager.setCurrentItem (position)을 사용하여 현재 항목을 뷰 페이지로 설정합니다.

+0

나는 아직도 그것을 얻지 못합니다. 제 코드가 어떻게 작동하는지 알려주시겠습니까? –

+0

제 수정 된 답변을 읽어주세요. –

+0

네, 고마워요, 나도 sharedPreferences를 사용하고 있습니다. –

0

다른 액티비티를 탐색 할 때와 onResume()에서 첫 번째 액티비티로 돌아갈 때 현재 프래그먼트 위치를 저장합니다. viewpager.setCurrentItem (int index) 여기서 index는 저장 한 값입니다.

+0

어떻게 단계를 사용하고 계십니까, 아직 이해가 안되요, 제발 흐름을 말해주세요. 위의 코드를 사용하고 계십니까? –

0

호출 된 작업에서 뒤로 버튼을 누르면 finish()를 추가해보십시오. 다른 액티비티에서 하나의 액티비티를 호출하면 호출자 액티비티의 인스턴스 상태가 저장되어 프래그먼트가 스택에 저장되고 액티비티가 호출되므로 다시 돌아가려면 첫 번째 액티비티와 호출자 액티비티의 인스턴스 상태를 완료하면된다. 호출되며 호출 된 활동과 동일한 부분을 가져옵니다. 그렇다면이 코드를 activity에 추가하십시오 :

@Override onBackPressed{finish();} 
관련 문제