0

はここでアプリがでframeLayoutと下部に4つのボタンが含まれているアクティビティが含まれていTabLayoutの選択したタブを保持する方法は、アンドロイドの別のフラグメントから返されたときに選択されたままですか?

enter image description here

私のアプリのスクリーンショットです。ボタンのそれぞれで

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 

    <LinearLayout 
     android:id="@+id/layoutParent" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:layout_gravity="bottom" 
     android:orientation="horizontal"> 
     <Button 
      android:id="@+id/fragmentOne" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:clickable="true" 
      android:gravity="center" 
      android:textColor="@color/selector_task_bar_text" 
      android:background="@drawable/selector_tab_layout_bg" 
      android:layout_weight="1" 
      android:text="One"/> 
     <Button 
      android:id="@+id/fragmentTwo" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:clickable="true" 
      android:gravity="center" 
      android:textColor="@color/selector_task_bar_text" 
      android:background="@drawable/selector_tab_layout_bg" 
      android:layout_weight="1" 
      android:text="Two"/> 
     <Button 
      android:id="@+id/fragmentThree" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:clickable="true" 
      android:gravity="center" 
      android:textColor="@color/selector_task_bar_text" 
      android:background="@drawable/selector_tab_layout_bg" 
      android:layout_weight="1" 
      android:text="Three"/> 
     <Button 
      android:id="@+id/fragmentFour" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:clickable="true" 
      android:gravity="center" 
      android:textColor="@color/selector_task_bar_text" 
      android:background="@drawable/selector_tab_layout_bg" 
      android:layout_weight="1" 
      android:text="Four"/> 
    </LinearLayout> 

</LinearLayout> 

アクティビティをクリックして(時間のために、私はContentFragmentという名前だけで一つの断片クラスを使用していますされている)でframeLayoutにフラグメントを追加します。 ViewPagerはTabLayoutのタブ上にスワイプまたは選択に異なるアイテムを示す三つの項目を有する

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs_sub" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     style="@style/CustomTabLayout" /> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 
</LinearLayout> 

を次のように

断片はTabLayoutとViewPagerを含みます。現在、私は今、私は何をする必要があるかViewPager

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/textInfo" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center" 
android:text="@string/app_name" 
android:textSize="20sp"/> 

内のすべてのページのためにこのレイアウトを追加したユーザーが下(ONE、TWO、THREE、FOUR)、特に特定のボタンを選択したときであります他のボタンに切り替えると、以前に選択されたボタンに戻ると、そのボタンに対してTabLayoutタブが選択されたままになっているはずです。例については

  1. ユーザーがボタンONEとユーザーがボタンを3になり、タブを選択し、1
  2. ViewPagerタブを選択2.
  3. ユーザーがボタンONEに戻ってくる、1が残っViewPagerタブを見つける必要があります選択された。
  4. ボタン3に移動すると、タブ2が選択されたままになっているはずです。

どうすればいいですか?

はここ

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private static final String TAG = MainActivity.class.getSimpleName(); 
    private TextView fragmentOneButton; 
    private TextView fragmentTwoButton; 
    private TextView fragmentThreeButton; 
    private TextView fragmentFourButton; 

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

    private void initLayout() { 
     fragmentOneButton = (TextView) findViewById(R.id.fragmentOne); 
     fragmentTwoButton = (TextView) findViewById(R.id.fragmentTwo); 
     fragmentThreeButton = (TextView) findViewById(R.id.fragmentThree); 
     fragmentFourButton = (TextView) findViewById(R.id.fragmentFour); 

     fragmentOneButton.setOnClickListener(this); 
     fragmentTwoButton.setOnClickListener(this); 
     fragmentThreeButton.setOnClickListener(this); 
     fragmentFourButton.setOnClickListener(this); 

     if (getSupportFragmentManager().findFragmentById(R.id.fragment_container) == null) { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.fragment_container, 
      ContentFragment.newInstance(1,"TabOne")).commit(); 
     } 
    } 


    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.fragmentOne: 
       getSupportFragmentManager().beginTransaction() 
         .replace(R.id.fragment_container, ContentFragment.newInstance(1,"TabOne")).commit(); 
       break; 
      case R.id.fragmentTwo: 
       getSupportFragmentManager().beginTransaction() 
         .replace(R.id.fragment_container, ContentFragment.newInstance(2,"TabTwo")).commit(); 
       break; 
      case R.id.fragmentThree: 
       getSupportFragmentManager().beginTransaction() 
         .replace(R.id.fragment_container, ContentFragment.newInstance(3,"TabThree")).commit(); 
       break; 
      case R.id.fragmentFour: 
       getSupportFragmentManager().beginTransaction() 
         .replace(R.id.fragment_container, ContentFragment.newInstance(4,"TabFour")).commit(); 
       break; 
      default: 
       break; 
     } 
    } 
} 

ContentFragment私MainActivityある

public class ContentFragment extends android.support.v4.app.Fragment { 
    private static final String TAG = ContentFragment.class.getSimpleName(); 
    private int mName = 0; 
    private ViewPager mFragmentsPager; 
    private TabLayout  mFragmentsTab; 
    private PagerAdapter pagerAdapter; 
    private String tabName = ""; 

    public static ContentFragment newInstance(int position,String tabName) { 
     ContentFragment contentFragment = new ContentFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putString("TAB_NAME",tabName); 
     bundle.putInt("KEY_POSITION",position); 
     contentFragment.setArguments(bundle); 
     return contentFragment; 
    } 

    public ContentFragment(){} 

    @Override 
    public void onAttachFragment(Fragment childFragment) { 
     super.onAttachFragment(childFragment); 
    } 

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

     final int position = getArguments().getInt("KEY_POSITION"); 
     tabName = getArguments().getString("TAB_NAME"); 

     initViews(view,position); 

     return view; 
    } 

    private void initViews(View view, int position) { 
     mName = position; 

     mFragmentsPager = (ViewPager) view.findViewById(R.id.viewPager); 
     mFragmentsPager.setOffscreenPageLimit(1); 

     pagerAdapter = new FragmentStateAdapter(getChildFragmentManager()); 

     mFragmentsPager.setOffscreenPageLimit(3); 
     mFragmentsPager.setAdapter(pagerAdapter); 

     mFragmentsTab = (TabLayout) view.findViewById(R.id.tabs_sub); 
     mFragmentsTab.setupWithViewPager(mFragmentsPager,false); 

    } 

    private class FragmentStateAdapter extends FragmentStatePagerAdapter { 
     public FragmentStateAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
     } 

     @Override 
     public Fragment instantiateFragment(int position) { 
      if (getFragment(position)!=null) { 
       return getFragment(position); 
      } else { 
       return ViewPagerContentFragment.newInstance(position,tabName); 
      } 

     } 

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

     public CharSequence getPageTitle(int position) { 
      return String.valueOf(position); 
     } 


     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      super.destroyItem(container, position, object); 
     } 
    } 
} 

ViewPagerContentFragment

public class ViewPagerContentFragment extends 
android.support.v4.app.Fragment { 
    private static final String TAG = ViewPagerContentFragment.class.getSimpleName(); 
    private TextView showOtherButton; 

    public static ViewPagerContentFragment newInstance(int position,String tabName) { 
     ViewPagerContentFragment contentFragment = new ViewPagerContentFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putInt("KEY_POSITION",position); 
     bundle.putString("TAB_NAME",tabName); 
     contentFragment.setArguments(bundle); 
     return contentFragment; 
    } 

    public ViewPagerContentFragment(){} 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.pager_content,container,false); 

     final int position = getArguments().getInt("KEY_POSITION"); 
     final String tabName = getArguments().getString("TAB_NAME"); 

     showOtherButton = (TextView) view.findViewById(R.id.textInfo); 
     showOtherButton.setText(tabName+"\n"+position); 
     showOtherButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      } 
     }); 
     return view; 
    } 
} 

私は他のレイアウトで下のバーを置き換えることはできません。

答えて

1

これは私がそれを解決する方法である:下のバー

public class Constant { 
    public static final Map<String,Integer> fragmentTabs = new HashMap<>(); 
} 

そして、中にボタンのクリックで追加された各フラグメントに現在選択されているタブを保存するために、フィールドでの定数クラスを作成し

ContentFragmentクラスはinitViewsメソッドでこれらのコードを追加しました。

​​
関連する問題