2016-09-28 10 views
1

TabLayoutとviewpagerを使用して各タブ間をスワイプしています。タブを配置する際に問題があります。例:tabs3で何かをクリックしてください。&何かの詳細な新しいアクティビティに移動します。タブ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や何か他のものにすることができます。

第2に、onResumeのタブフラグメントでは、sharedPreferencesから位置を読み取り、現在のアイテムをviewpager.setCurrentItem(position)でビューページに設定します。

+0

私はまだそれを得ることはできません、私のコードで作業する方法は教えてください? –

+0

私の編集した答えをお読みください。 –

+0

yeahh、ありがとう、私もsharedPreferencesを使用しています。 –

0

他のアクティビティに移動するとき、およびonResume()の最初のアクティビティに戻るときに、現在のフラグメントの位置を保存します。 viewpager.setCurrentItem(int index)indexは保存した値です。

+0

どのようにステップを使用している、私はまだそれを得ることはありません、私にあなたのコードを使用している流れを教えてください..? –

0

呼び出されたアクティビティで戻るボタンが押されたときにfinish()を追加してみてください。あるアクティビティーを他のアクティビティーから呼び出すと、呼び出し元アクティビティーのインスタンス状態が保管され、フラグメントがスタックに保管され、アクティビティーが呼び出されます。その場合は、最初のアクティビティーと呼び出し元アクティビティーのインスタンス状態呼び出され、呼び出されたアクティビティと同じフラグメントが取得されます。だから、このコードを呼び出されたアクティビティに追加してください:

@Override onBackPressed{finish();} 
関連する問題