Skip to content

Commit 3142808

Browse files
A1Z1J1WCA1Z1J1WC
authored andcommitted
library added
2 parents dfcc632 + 3f6dc5f commit 3142808

File tree

5 files changed

+298
-1
lines changed

5 files changed

+298
-1
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,6 @@ dependencies {
3838
implementation 'androidx.recyclerview:recyclerview:1.0.0'
3939
//support design
4040
implementation 'com.google.android.material:material:1.0.0-rc01'
41+
4142
implementation project(path: ':bottomnavlibrary')
4243
}

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
android:supportsRtl="true"
1111
android:theme="@style/AppTheme">
1212
<activity
13-
1413
android:name=".MainActivityNew">
1514
<intent-filter>
1615
<action android:name="android.intent.action.MAIN"/>
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.example.backstack_bottomnavigation
2+
3+
import android.os.Build
4+
import android.util.ArrayMap
5+
import android.util.SparseArray
6+
import androidx.annotation.RequiresApi
7+
import androidx.fragment.app.Fragment
8+
import java.lang.Exception
9+
10+
class FragmentStack {
11+
var arrayList: ArrayList<String>
12+
var count :Int=0
13+
constructor(count :Int){
14+
arrayList= ArrayList()
15+
this.count=count
16+
}
17+
18+
companion object{
19+
20+
private var stack_object:FragmentStack?=null
21+
22+
23+
fun getInstance(count :Int):FragmentStack{
24+
if (stack_object==null)
25+
stack_object= FragmentStack(count)
26+
27+
return stack_object!!
28+
}
29+
30+
}
31+
32+
fun addAll(array: ArrayList<String> ?){
33+
arrayList.addAll(array!!)
34+
}
35+
36+
fun push(tag:String){
37+
if (count==arrayList.size){
38+
if (remove(tag)){
39+
arrayList.add(tag)
40+
}
41+
}else{
42+
43+
arrayList.add(tag)
44+
}
45+
}
46+
47+
fun pop(tag: String):String?{
48+
if (remove(tag)){
49+
if (arrayList.size==0){
50+
return null
51+
}else{
52+
return arrayList.get(arrayList.size-1)
53+
}
54+
55+
}else{
56+
return null
57+
}
58+
59+
}
60+
61+
fun remove(tag: String):Boolean{
62+
try {
63+
64+
var index_value=arrayList.indexOf(tag)
65+
arrayList.removeAt(index_value)
66+
}catch (e:Exception){
67+
return false
68+
}
69+
return true
70+
}
71+
72+
73+
74+
75+
}
Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
package com.example.backstack_bottomnavigation
2+
3+
import androidx.appcompat.app.AppCompatActivity
4+
import android.os.Bundle
5+
import android.util.Log
6+
import android.view.MenuItem
7+
import androidx.fragment.app.Fragment
8+
import androidx.fragment.app.FragmentManager
9+
import com.example.backstack_bottomnavigation.fragments.HomeFragment
10+
import com.example.backstack_bottomnavigation.fragments.MidFragment
11+
import com.example.backstack_bottomnavigation.fragments.ProfileFragment
12+
import com.google.android.material.bottomnavigation.BottomNavigationView
13+
import java.util.*
14+
15+
class MainActivity : AppCompatActivity() {
16+
private lateinit var bottomNavigation:BottomNavigationView
17+
private var currentTag:String="null"
18+
private var currentFragment:Fragment?=null
19+
private lateinit var homeFragment:Fragment
20+
private lateinit var midFragment:Fragment
21+
private lateinit var profileFragment:Fragment
22+
override fun onCreate(savedInstanceState: Bundle?) {
23+
super.onCreate(savedInstanceState)
24+
setContentView(R.layout.activity_main)
25+
//doWork()
26+
init(savedInstanceState)
27+
}
28+
29+
30+
31+
fun doWork(){
32+
val array= arrayOf(2,3,2,3,5)
33+
val hashmap=HashMap<Int,Int>()
34+
for (i in 0.. array.size-1){
35+
if (hashmap.containsKey(array[i])){
36+
hashmap.put(array[i],(hashmap.get(array[i]) as Int)+1)
37+
}else{
38+
hashmap.put(array[i],1)
39+
}
40+
}
41+
publishResult(hashmap)
42+
43+
}
44+
45+
private fun publishResult(hashmap: HashMap<Int, Int>) {
46+
var iterator=hashmap.entries.iterator()
47+
while (iterator.hasNext()){
48+
var entry =iterator.next()
49+
Log.d("Aryan","${entry.key}--"+entry.value)
50+
}
51+
52+
}
53+
54+
private fun init(savedInstanceState: Bundle?) {
55+
56+
bottomNavigation=findViewById(R.id.btm_nav)
57+
if (savedInstanceState==null){
58+
homeFragment= HomeFragment()
59+
midFragment= MidFragment()
60+
profileFragment= ProfileFragment()
61+
updateFragment(homeFragment,"home")
62+
}else{
63+
var stack=savedInstanceState.getStringArrayList("fragStack")
64+
FragmentStack.getInstance(3).addAll(stack);
65+
currentTag=savedInstanceState.getString("currentTag")!!
66+
currentFragment=supportFragmentManager.findFragmentByTag(currentTag)
67+
if (supportFragmentManager.findFragmentByTag("home")==null){
68+
homeFragment= HomeFragment()
69+
}else{
70+
homeFragment=supportFragmentManager.findFragmentByTag("home")!!
71+
}
72+
if (supportFragmentManager.findFragmentByTag("mid")==null){
73+
midFragment= MidFragment()
74+
}else{
75+
midFragment=supportFragmentManager.findFragmentByTag("mid")!!
76+
}
77+
if (supportFragmentManager.findFragmentByTag("profile")==null){
78+
profileFragment= ProfileFragment()
79+
}else{
80+
profileFragment= supportFragmentManager.findFragmentByTag("profile")!!
81+
}
82+
83+
when(currentTag){
84+
"home"->{
85+
updateFragment(homeFragment,"home")
86+
bottomNavigation.selectedItemId=R.id.action_home
87+
88+
}
89+
"mid"->{
90+
updateFragment(midFragment,"mid")
91+
bottomNavigation.selectedItemId=R.id.action_mid
92+
93+
}
94+
"profile"->{
95+
updateFragment(profileFragment,"profile")
96+
bottomNavigation.selectedItemId=R.id.action_profile
97+
98+
}
99+
100+
}
101+
102+
}
103+
104+
bottomNavigation.setOnNavigationItemSelectedListener(object :BottomNavigationView.OnNavigationItemSelectedListener{
105+
override fun onNavigationItemSelected(item: MenuItem): Boolean {
106+
when(item.itemId){
107+
R.id.action_home->{
108+
109+
110+
updateFragment(homeFragment,"home")
111+
return true
112+
}
113+
R.id.action_mid->{
114+
115+
updateFragment(midFragment,"mid")
116+
return true
117+
}
118+
R.id.action_profile->{
119+
updateFragment(profileFragment,"profile")
120+
return true
121+
}
122+
123+
}
124+
return false
125+
126+
}
127+
128+
})
129+
130+
}
131+
132+
fun updateFragment(fragment:Fragment, tag:String){
133+
134+
if (currentTag.equals(tag)){
135+
return
136+
}
137+
var prev_fragment=supportFragmentManager.findFragmentByTag(tag)
138+
139+
// if fragment is not present in stack
140+
if (prev_fragment==null){
141+
if (currentFragment==null){
142+
supportFragmentManager.beginTransaction().add(R.id.frag_container,fragment,tag).commit()
143+
}else{
144+
supportFragmentManager.beginTransaction().hide(currentFragment!!).add(R.id.frag_container,fragment,tag).commit()
145+
}
146+
147+
}
148+
// if fragment is already added
149+
else{
150+
supportFragmentManager.beginTransaction().hide(currentFragment!!).show(prev_fragment).commit()
151+
}
152+
FragmentStack.getInstance(3).push(tag)
153+
currentFragment=fragment
154+
currentTag=tag
155+
156+
}
157+
158+
override fun onBackPressed() {
159+
160+
var currentFrag=supportFragmentManager.findFragmentByTag(currentTag)
161+
162+
var childfragmanager: FragmentManager?=null
163+
if (currentFrag is ProfileFragment){
164+
childfragmanager=currentFrag.getchildFragmentManager()
165+
}else if (currentFrag is MidFragment){
166+
167+
childfragmanager=currentFrag.getchildFragmentManager()
168+
}else if (currentFrag is HomeFragment){
169+
170+
childfragmanager=currentFrag.getchildFragmentManager()
171+
}
172+
if (childfragmanager?.backStackEntryCount!!>0){
173+
childfragmanager.popBackStackImmediate()
174+
}
175+
else{
176+
177+
var toptag = FragmentStack.getInstance(3).pop(currentTag)
178+
if (toptag!=null){
179+
var topfrag= supportFragmentManager.findFragmentByTag(toptag)
180+
supportFragmentManager.beginTransaction().hide(currentFragment!!).show(topfrag!!).commit()
181+
currentTag=toptag
182+
currentFragment=topfrag
183+
if (currentTag.equals("home")){
184+
bottomNavigation.selectedItemId=R.id.action_home
185+
}else if (currentTag.equals("mid")){
186+
187+
bottomNavigation.selectedItemId=R.id.action_mid
188+
}else if (currentTag.equals("profile")){
189+
190+
bottomNavigation.selectedItemId=R.id.action_profile
191+
}
192+
193+
194+
}else{
195+
if (currentTag.equals("home")){
196+
super.onBackPressed()
197+
}else{
198+
199+
var newfrag= supportFragmentManager.findFragmentByTag("home")
200+
supportFragmentManager.beginTransaction().hide(currentFragment!!).show(newfrag!!).commit()
201+
currentTag="home"
202+
currentFragment=newfrag
203+
204+
bottomNavigation.selectedItemId=R.id.action_home
205+
}
206+
207+
}
208+
209+
}
210+
211+
212+
213+
214+
}
215+
216+
override fun onSaveInstanceState(outState: Bundle) {
217+
outState.putString("currentTag",currentTag)
218+
outState.putStringArrayList("fragStack",FragmentStack.getInstance(3).arrayList)
219+
super.onSaveInstanceState(outState)
220+
}
221+
}

app/src/main/java/com/example/backstack_bottomnavigation/fragments/HomeFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ lateinit var about_me:TextView
3636
}
3737

3838
private fun init() {
39+
3940
var name = arguments?.getString("Name")?:let { "nothing" }
4041
Toast.makeText(context,name,Toast.LENGTH_LONG).show()
4142
about_me=mrootView.findViewById(R.id.about_me)

0 commit comments

Comments
 (0)