7

मुझे यकीन है कि अपनी छोटी सी समस्या के लिए एक समस्या है, लेकिन मेरे लिए यह सबसे बड़ी समस्या कभी में से एक ...BottomNavigationView

तो समस्या यह है कि मैं अपने अनुप्रयोग के लिए नीचे नेविगेशन देखें जोड़ लिया है, लेकिन मैं नीचे की जरूरत है नेविगेशन खंड के बजाय गतिविधियों के बीच देखें इसलिए मैंने अपनी सभी 3 गतिविधियों के लिए जावा में यह कोड जोड़ा है ...

समस्या यह है कि जब मैं अपने फोन में दूसरा या तीसरा चुनता हूं तो चयनित आइटम "हाइलाइट" "पहला" होता है इसलिए सभी चीजें सही हैं लेकिन समस्या को हल करने वाली समस्या स्वचालित रूप से पहले आइटम पर जाती है, इसलिए कृपया मुझे लोगों की सहायता करें

पहली गतिविधि कोड है:

BottomNavigationView mBottomNavigation; 

    mBottomNavigation =(BottomNavigationView) findViewById(R.id.BottomNavigator); 

    mBottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      switch (item.getItemId()){ 
       case R.id.Nav_Second: 
        Intent Second= new Intent(First.this, Second.class); 
        startActivity(Second); 
        break; 
       case R.id.Nav_Third: 
        Intent Third= new Intent(First.this, Third.class); 
        startActivity(Third); 
        break; 
      } 

      return true; 
     } 
    }); 


}} 

दूसरी गतिविधि है:

BottomNavigationView mBottomNavigation;

mBottomNavigation =(BottomNavigationView) findViewById(R.id.BottomNavigator); 

    mBottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      switch (item.getItemId()){ 
       case R.id.Nav_First: 
        Intent First= new Intent(Second.this, First.class); 
        startActivity(First); 
        break; 
       case R.id.Nav_Third: 
        Intent Third= new Intent(Second.this, Third.class); 
        startActivity(Third); 
        break; 
      } 

      return true; 
     } 
    }); 

}} 

तीसरी गतिविधि है:

BottomNavigationView mBottomNavigation;

mBottomNavigation =(BottomNavigationView) findViewById(R.id.BottomNavigator); 

    mBottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      switch (item.getItemId()){ 
       case R.id.Nav_First: 
        Intent First= new Intent(Third.this, First.class); 
        startActivity(First); 
        break; 
       case R.id.Nav_Second: 
        Intent Second= new Intent(Third.this, Second.class); 
        startActivity(Second); 
        break; 
      } 

      return true; 
     } 
    }); 


}} 

एक्सएमएल 3 गतिविधियों के लिए ही कर रहे हैं:

<android.support.design.widget.BottomNavigationView 
 
     android:layout_width="match_parent" 
 
     android:layout_height="wrap_content" 
 
     android:id="@+id/BottomNavigator" 
 
     android:background="@color/colorPrimaryDark" 
 
     android:layout_alignParentBottom="true" 
 
     app:itemTextColor="@drawable/item_bg" 
 
     app:itemIconTint="@drawable/item_bg" 
 
     app:menu="@menu/navigate_items"> 
 
    </android.support.design.widget.BottomNavigationView>

समाधान की आवश्यकता है कि जब मैं अपने आप प्रेस आइटम को हाइलाइट करने के लिए है,

मैं खंड का उपयोग किया है और यह पूरी तरह से काम करता है लेकिन मैं अभी भी खंड का उपयोग करने के लिए शुरुआती हूं इसलिए मैं सक्रियण का उपयोग कर रहा हूं एँ ...

किसी भी तेजी से मदद कर रहा

+0

जब तक मैं कुछ याद कर रहा हूँ, इस टुकड़े (और यह पूरी तरह से काम करता है) का उपयोग करने के लिए एक अच्छा परिदृश्य है, तो क्यों कि से टिक नहीं? –

+0

क्योंकि मुख्य गतिविधियों की तुलना में टुकड़ा थोड़ा मुश्किल है ... – 7uthaifah

+0

मैं ऐप कॉम्पैक्ट एक्टिविटी – 7uthaifah

उत्तर

10

आप गतिविधियों टैब का प्रतिनिधित्व करने के साथ BottomNavigationView उपयोग कर सकते हैं की प्रतीक्षा में। कुंजी प्रत्येक गतिविधि में नेविगेशन व्यू घटक को दोहराना है, और प्रत्येक गतिविधि का कोड नेविगेशन घटक को नियंत्रित करता है: नेविगेशन आइटम क्लिक पर सही गतिविधि शुरू करना और गतिविधि शुरू होने के बाद उचित नेविगेशन आइटम का चयन करना।

आपको नई गतिविधि को बदलने से पहले टैब स्विचिंग एनीमेशन को पूरा करने की अनुमति देने के लिए देरी के साथ नई चुनी गई गतिविधियां (टैब) शुरू करने की आवश्यकता है।

मेरा दृष्टिकोण सामान्य व्यवहार को लागू करने वाले समान बेसएक्टिविटी क्लास से प्राप्त टैब का प्रतिनिधित्व करने वाली सभी गतिविधियां थीं।

यह एक उदाहरण BaseActivity का कोड है:

public abstract class BaseActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener { 

    protected BottomNavigationView navigationView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(getContentViewId()); 

     navigationView = (BottomNavigationView) findViewById(R.id.navigation); 
     navigationView.setOnNavigationItemSelectedListener(this); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     updateNavigationBarState(); 
    } 

    // Remove inter-activity transition to avoid screen tossing on tapping bottom navigation items 
    @Override 
    public void onPause() { 
     super.onPause(); 
     overridePendingTransition(0, 0); 
    } 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     navigationView.postDelayed(() -> { 
      int itemId = item.getItemId(); 
      if (itemId == R.id.navigation_home) { 
       startActivity(new Intent(this, HomeActivity.class)); 
      } else if (itemId == R.id.navigation_dashboard) { 
        startActivity(new Intent(this, DashboardActivity.class)); 
      } else if (itemId == R.id.navigation_notifications) { 
        startActivity(new Intent(this, NotificationsActivity.class)); 
      } 
      finish(); 
     }, 300); 
     return true; 
    } 

    private void updateNavigationBarState(){ 
     int actionId = getNavigationMenuItemId(); 
     selectBottomNavigationBarItem(actionId); 
    } 

    void selectBottomNavigationBarItem(int itemId) { 
     Menu menu = navigationView.getMenu(); 
     for (int i = 0, size = menu.size(); i < size; i++) { 
      MenuItem item = menu.getItem(i); 
      boolean shouldBeChecked = item.getItemId() == itemId; 
      if (shouldBeChecked) { 
       item.setChecked(true); 
       break; 
      } 
     } 
    } 

    abstract int getContentViewId(); 

    abstract int getNavigationMenuItemId(); 

} 

यह वह जगह है एंड्रॉयड स्टूडियो के नीचे नेविगेशन गतिविधि टेम्पलेट के आधार पर मेरा पूरा उदाहरण:

https://github.com/ddekanski/BottomNavigationViewBetweenActivities

+0

मैंने आपको कोड देखा है कि गतिविधियों के अंदर टुकड़ों के राज्यों को कैसे बनाए रखा जाए जब मैं टैब 1 दबाता हूं तो मैं नीचे स्क्रॉल करता हूं, फिर मैं टैब 2 दबाता हूं और टैब 1 दबाता हूं, यह मुझे स्क्रॉल करता है? –

+0

overridePendingTransition (0, 0) का उपयोग करने के बजाय; ऑन पॉज़() में, @ null थीम में उपयोग करें। यहां पूरा समाधान देखें - https://stackoverflow.com/questions/6972295/switching-activities-without-animation/9312957#9312957 – Shubh

1

किसी को भी करने के लिए अभी भी इस की तलाश में , @ javazian का जवाब प्रत्येक गतिविधि को विस्तारित करने का उत्तर मेरी राय में वास्तविक ओवरकिल है।

नौसेना मेनू को पुनर्प्राप्त करने और मैन्युअल रूप से प्रासंगिक मेनू आइटम को जांचने के लिए एक और अधिक संक्षिप्त समाधान है।

नीचे दिए गए उदाहरण में नोट करें, INSERT_INDEX_HERE को मेनू आइटम की अनुक्रमणिका के साथ प्रतिस्थापित करने की आवश्यकता है, (उदाहरण के लिए बाईं ओर मेनू आइटम में सूचकांक 0 होगा)।

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

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 

    // Ensure correct menu item is selected (where the magic happens) 
    Menu menu = navigation.getMenu(); 
    MenuItem menuItem = menu.getItem(INSERT_INDEX_HERE); 
    menuItem.setChecked(true); 
} 
संबंधित मुद्दे