0

この問題を解決するのはかなり難しいです。TabLayout:タブをクリックしたときの字幕の表示/非表示

私のアプリには、私がTabLayoutを含むTabFragmentを持っているMainActivityがあります。 MainActivityのツールバーにサブタイトルを表示するには、ユーザーが2番目のタブをクリックしたときにのみ、それをクリックしたときに非表示にします。

私はすでにNavigationDrawerサイドで取得できました(そこからタブを選択することもできます)。 まだ、(フラグメントにある)タブにsetOnClickListenerを設定する方法を理解できませんし、2番目のタブにある場合のみ、コンテントアクティビティにサブタイトルを表示するよう依頼します。

サブタイトルの表示/非表示に使用するMainActivityの2つの方法があります。私TabFragmentの内部

// Update the petrol stations' total count. 
public void updatePetrolStationsCount(Toolbar toolbar) { 
    PetrolLab petrolLab = PetrolLab.get(getApplicationContext()); 
    int petrolStationsSize = petrolLab.getPetrolStations().size(); 
    String totalCount = getResources().getQuantityString(R.plurals.total_count_format, petrolStationsSize, petrolStationsSize); 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setSubtitle(totalCount); 
} 

// Hide the petrol stations' total count. 
public void hidePetrolStationsCount(Toolbar toolbar) { 
    String totalCount = null; 

    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    toolbar.setSubtitle(totalCount); 
} 

、私はTabPagerのための内部クラスを使用しています。

class TabPagerAdapter extends FragmentPagerAdapter { 

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

    // Return fragment with respect to position. 
    @Override 
    public Fragment getItem(int position) { 

     Fragment fragment; 

     switch (position) { 

      case MAP_POSITION: 
       fragment = MapFragment.newInstance(MAP_TYPE); 
       return fragment; 

      case PETROL_POSITION: 
       fragment = PetrolStationListFragment.newInstance(position); 
       return fragment; 

      case FAV_POSITION: 
       return new FavouritesFragment(); 
     } 

     return null; 
    } 

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

} 

MainActivityに、ユーザーがTabFragmentの2番目のタブを選択したことを伝えるヒントはありますか?リスナーを各タブに配置するのと同じです。おかげさまで

答えて

1

あなたは、このような2つ目のタブ 選択したときにブロードキャストにメッセージを送信し、MainActivityにBroadCastReceiveを登録することができますフラグメント

manager = LocalBroadcastManager.getInstance(this); 
Intent intent= new Intent("com.action.changetab");//same as you filter 
        intent.putExtra("xy",1); 
        manager.sendBroadcast(intent); 

protected void onCreate(Bundle savedInstanceState) { 
    //to register BroadCastReceive 
    manager = LocalBroadcastManager.getInstance(this); 
    myReceive = new MyReceiver(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction("com.action.changetab");//fill you want to write 
    manager.registerReceiver(myReceive,filter); 
} 

class MyReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      int xy= intent.getIntExtra("xy",0); 
      if(xy==1){ 
      //change tab 
      } 
    } 
} 

をあなたがより良いGoogleからの最初の放送を学びたいですそれはあなたにそれの深い理解をもたらします

+0

?またはガイド?ご返信ありがとうございます。 – Davide3i

+0

OK! tablayout.setOnTabSelectedListener();という意味です。 – Cgx

+0

私はそれを正確に行うことができました!ありがとうございました。 – Davide3i

0

私はCgxのおかげで問題を解決することができました。

私は彼が言ったように私MainActivityを設定し、その後、TabFragmentの内側にきた:それを行う方法について、任意のテンプレートコード

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

    ... 

    mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 

     int flag; 

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

      if (tab.getPosition() == PETROL_POSITION) { 
       flag = 1; 
       sendBroadcast(flag); 
      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      if (tab.getPosition() == PETROL_POSITION) { 
       flag = 0; 
       sendBroadcast(flag); 
      } 
     } 

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

     } 

    }); 

    return view; 

} 

// Send a broadcast to MainActivity about the tab we are inside to. 
public void sendBroadcast(int flag) { 
    mLocalBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); 
    Intent intent = new Intent(ACTION_TAB_ID); 
    intent.putExtra(EXTRA_TAB_ID, flag); 
    mLocalBroadcastManager.sendBroadcast(intent); 
} 
関連する問題