【问题标题】:Remember selected tab in android记住在android中选择的标签
【发布时间】:2016-03-30 17:57:10
【问题描述】:

我有一个活动 A,其中包含一个带有 2 个选项卡的选项卡布局:tab1 位于位置 1,tab2 位于位置 2。
任一选项卡都包含一个带有可点击项目的回收站视图。点击开始活动 B.
如果选择 tab1 并单击其中一个项目,则活动 B 开始,并使用后退按钮返回选择 tab1 的活动 A。 但是,如果我对 tab2 执行相同操作,那么每当我返回活动 A 时,tab1 仍然是选定的。
如何记住选定的选项卡,以便每当我离开活动 B 时,会显示先前选择的选项卡,而不总是显示 tab1?

【问题讨论】:

  • 也许覆盖onStop() 来记录当前选择的标签,然后在onResue() 中设置该标签可能有效?
  • 查看此related question,但请改用onPause()onResume()
  • 将您在onPause() 中的位置保存在SharedPreferences 中,并在onResume() 中恢复正确的选项卡。
  • 为活动A设置android:launchMode=singleTop解决了这个问题。无需保存任何位置。

标签: java android


【解决方案1】:

设置

android:launchMode=singleTop

对于开始活动为我解决了问题。无需保存任何选项卡位置。

【讨论】:

    【解决方案2】:

    确保您以正确的方式实现向上导航:

    <application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
    

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    

    来源:https://developer.android.com/training/implementing-navigation/ancestral.html

    【讨论】:

    • 他/她还需要考虑方向变化。方向更改不会保留选项卡布局选择的状态
    • @Matias Elorriaga 使用 NavUtils.navigateUpFromSameTask() 不起作用。第一个标签仍然是选定的。
    【解决方案3】:

    是的,这是一篇旧帖子,对此我深表歉意,但是这里的答案很糟糕,因此通常执行此操作的方法是保存和恢复实例状态,因此创建一个仅用作键的字符串,我的称为CURRENT_FRAGMENT,然后在你的保存实例状态

    @Override
       public void onSaveInstanceState(@NonNull Bundle outState) {
           super.onSaveInstanceState(outState);
           outState.putInt(CURRENT_FRAGMENT, 
           requestTabLayout.getSelectedTabPosition());
     }
    

    然后为了恢复它,您可以覆盖恢复实例状态,或者您可以检查 onCreate 或 onStart 中的 savedInstanceState 类似的东西

    if (savedInstanceState  != null){
        requestTabLayout.getTabAt(savedInstanceState.getInt(CURRENT_FRAGMENT))
        .select();
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 2012-01-10
      • 2011-03-17
      相关资源
      最近更新 更多