11

के लिए उपकरण पट्टी होने मैं अपने अनुप्रयोग में एकल गतिविधि और कई टुकड़े दृष्टिकोण का उपयोग कर रहादराज टॉगल संभालने के लिए और ऊपर टूलबार जब प्रत्येक खंड

अब मेरी कुछ टुकड़े में से मैं उपकरण पट्टी में मैं अलग करने का निर्णय लिया कस्टम दृश्य है कैसे प्रत्येक खंड के लिए टूलबार।

कैसे प्रत्येक खंड भी दराज लेआउट मेरी गतिविधि में है Home page category page

+0

क्या आपको कोई समाधान मिला है? –

+0

कोई समाधान नहीं मिला – alphanso

उत्तर

0

मैं अगर मैं सही ढंग से अपने अनुप्रयोग के अपने विवरण समझ में आ यकीन नहीं है के लिए अलग से उपकरण पट्टी को लागू करने की है, लेकिन मैं हाल ही में किया था कि मैं क्या लगता है कि आप वर्णित हैं। मेरा गतिविधि लेआउट एक एकल टूलबार और नीचे एक फ्रेमलेआउट के साथ एक कोऑर्डिनेटरलेआउट/ऐपबार लेआउट के साथ एक ड्रॉवरलाउट था। Menu.xml में सभी टुकड़ों के लिए मेरे टूलबार में आवश्यक सभी आइटम शामिल थे। एनवी मेनू में क्लिक किए गए आइटम फ्रेमलेआउट में टुकड़े स्वैप करेंगे। मेरे onNavigationItemSelected() टुकड़े बाहर स्वैप और backstack को संभालने के लिए इस पद्धति पर कहा जाता है:

public void switchView(int id, int optArg) { 
    if (currentView != id) { 
    currentView = id; //currentView keeps track of which fragment is loaded 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    //Fragment contentFragment is the current fragment in the FrameLayout 
    switch (id) { 
     case 0: //menu item 1 
     contentFragment = new Nav_Item1_Fragment(); 
     transaction.replace(R.id.fragment_container, contentFragment, ""); 
     break; 
     case 1: //menu item 2 
     contentFragment = new Nav_Item2_Fragment(); 
     transaction.replace(R.id.fragment_container, contentFragment, ""); 
     break; 
     case 2: //menu item 3 
     contentFragment = new Nav_Item3_Fragment(); 
     transaction.replace(R.id.fragment_container, contentFragment, ""); 
     break; 
    } 
    // Replace whatever is in the fragment_container view with this fragment, 
    // and add the transaction to the back stack 
    // transaction.replace(R.id.fragment_container, contentFragment); 
    transaction.addToBackStack(null); 
    // Commit the transaction 
    transaction.commit(); 
    } 
} 

और प्रत्येक खंड के onPrepareOptionsMenu() मैं setVisible() में छिप/कि टुकड़ा से संबंधित उपकरण पट्टी में मेनू आइटम दिखाया। प्रत्येक आइटम में मेनू आइटम के ऑनक्लिक विशेषता द्वारा इंगित गतिविधि में एक विधि थी जो जानता था कि यह किस टुकड़े से था और इसके लिए क्या विचार पारित किए गए थे।

drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
     this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
drawer.addDrawerListener(toggle); 
toggle.syncState(); 

गतिविधि xml::

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    ...> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     .../> 

</android.support.v4.widget.DrawerLayout> 

app_bar_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    ...> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     ...> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:gravity="top" 
      .../> 

    </android.support.design.widget.AppBarLayout> 

    <FrameLayout 
     android:id="@+id/fragment_container" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
    </FrameLayout> 

</android.support.design.widget.CoordinatorLayout> 

तो

दराज() गतिविधि का तो जैसे एक ActionBarDrawerToggle साथ onCreate में सेटअप था ... एक नव मेनू, एक ऐप/टूल बार, एकाधिक टुकड़े

+0

नहीं, यह नहीं है कि मैं चाहता हूं कि मैं प्रत्येक टुकड़े के लिए टूलबार चाहता हूं और उसी समय ड्रॉवर टॉगल को संभालना चाहता हूं – alphanso

0

आप प्रत्येक टुकड़े के लिए विशेष रूप से एक अलग टूलबार क्यों चाहते हैं? आप प्रत्येक टुकड़े के लिए टूलबार दृश्य को आसानी से बदल सकते हैं।

अपने समारोह में टुकड़े स्विच करने के लिए -

public void selectDrawerItem(MenuItem item) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction; 
     switch (item.getItemId()) { 

        case R.id.nav_home : 
         getSupportActionBar().setCustomView(R.layout.home_nav_bar); 
         fragmentClass = HomeFragment.class; 
         break; 
        case R.id.nav_settings : 
         getSupportActionBar().setCustomView(R.layout.settings_nav_bar); 
         fragmentClass = SettingsFragment.class; 
         break; 

     } 
     fragment = (Fragment) fragmentClass.newInstance(); 
     fragmentManager.popBackStack(null, 
     FragmentManager.POP_BACK_STACK_INCLUSIVE); 

     fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, fragment); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 
} 

तो आप आसानी से एक ही उपकरण पट्टी का उपयोग करें और प्रत्येक खंड के लिए अपनी आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं।

+0

मैं प्रत्येक टुकड़े के लिए अलग टूलबार का उपयोग करना चाहता हूं, कृपया फिर से प्रश्न पढ़ें – alphanso

+0

क्या आप कृपया बता सकते हैं कि आप क्यों एक अलग टूलबार का उपयोग करना चाहते हैं? कस्टम व्यू का उपयोग करना एक अलग टूलबार का उपयोग करना है। यदि आप अभी भी अलग टूलबार पर अशिष्ट हैं, तो एकमात्र विकल्प जिसे मैं सोच सकता हूं, टूलबार उदाहरण के साथ ActionBarDrawerToggle के कई उदाहरण बनाना है - 'ActionBarDrawerToggle toggle1 = new ActionBarDrawerToggle ( यह, drawerLayout, टूलबार 1, R.string.navigation_open , R.string.navigation_close); 'और उसके बाद आप जिस टुकड़े को चाहते हैं उसे लोड करने से पहले,' drawerLayout.addDrawerListener (टॉगल 1); 'यह परीक्षण नहीं किया गया है। तो अगर यह काम करता है तो मुझे बताएं। – user3911483

4

मुझे एक ही समस्या है, मैं प्रत्येक खंड के लिए कस्टम टूलबार दृश्य जोड़ूंगा।

//Create your custom view based on requirement 
    View view = Utility.addRemoveViewFromToolbar(getActivity(), R.layout.toolbar_search_view); 
     if (view != null) { 
      edtCategory1 = (EditText) view.findViewById(R.id.edtCategory1); 
      edtCategory1.setOnClickListener(this); 
     } 

आशा इस स्पष्टीकरण मदद आप :)

0

यह एक काफी सरल तरीके से किया जा सकता है

public static View addRemoveViewFromToolbar(FragmentActivity fragmentActivity, int resourceId) { 
    Toolbar toolbar = removeViewFromToolbar(fragmentActivity); 
    if (resourceId == 0) { 
     return null; 
    } else { 
     View view = LayoutInflater.from(fragmentActivity).inflate(resourceId, toolbar, false); 
     toolbar.addView(view); 
     return view; 
    } 
} 


public static Toolbar removeViewFromToolbar(FragmentActivity fragmentActivity) { 
    Toolbar toolbar = (Toolbar) fragmentActivity.findViewById(R.id.toolbar); 
    if (toolbar.getChildCount() > 1) { 
     for (int i = 1; i <= toolbar.getChildCount(); i++) { 
      toolbar.removeViewAt(1); 
     } 
    } 
    return toolbar; 
} 

मेरी प्रत्येक खंड में:

मेरे उपयोगिता विधि है।

  1. पहले drawerlayout के साथ एक गतिविधि बनाएं।

  2. दूसरा गतिविधि के अंदर एक कंटेनर viewpager बनाने धारण करने के लिए fragments

  3. तीसरा कि प्रदर्शन पर fragment के आधार पर प्रासंगिक toolbar सेट हो जाएगा अपने viewpager पर एक श्रोता को लागू।

मुझे प्रासंगिक XMLs और कोड

सबसे पहले मुख्य गतिविधि

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     tools:openDrawer="start"> 
<include 
    layout="@layout/app_bar_landing_page" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_landing_page" 
    app:menu="@menu/activity_landing_page_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

कृपया ध्यान दें कंटेनर लेआउट app_bar_landing_page के लिए Drawerlayout एक्सएमएल से उदाहरण देकर स्पष्ट करते हैं। अब के लिए इस

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="me.veganbuddy.veganbuddy.ui.LandingPage"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:elevation="4dp" 
      app:logo="@drawable/vegan_buddy_menu_icon" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/container_for_fragments" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 

नोट viewpager जो टुकड़े के लिए कंटेनर के रूप में कार्य करेगा एक्सएमएल। अब दर्शक पर OnPageChangeListener

mViewPager = (ViewPager) findViewById(R.id.container_for_fragments); 
    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      switch (position+1){ 
       case 0:setSupportActionBar(aToolbar); 
        break; 
       case 1:setSupportActionBar(bToolbar); 
        break; 
       case 2:setSupportActionBar(cToolbar);; 
        break; 
       case 3:setSupportActionBar(dToolbar); 
        break; 
       default: 
        break; 
      } 
     } 

मुझे पता है अगर किसी भी आगे स्पष्टीकरण

0

सरल दृष्टिकोण मेरा सुझाव है गतिविधि के लिए कॉलबैक के उपयोग करने के लिए है की जरूरत है करते हैं। जब भी प्रत्येक टुकड़ा गतिविधि में लोड होता है, गतिविधि में कॉलबैक व्यवस्थित करें और गतिविधि में उपयुक्त टूलबार लोड करें।

अपने लेआउट फ़ोल्डर में अलग टूलबार xmls है। टूलबार को अपनी गतिविधि में रखने के लिए टैग शामिल करें का उपयोग करें। एक समय में केवल 1 टूलबार दिखाई दें। जब आपकी गतिविधि में खंड कॉलबैक आते हैं तो आवश्यक एक दृश्यमान बनाते हैं।

संबंधित मुद्दे