[ERLEDIGT] Verschiedene Layouts in BottomNavigationActivity verwalten

E

exidio

Neues Mitglied
0
Guten Tag liebe Community.
Ich bin neu im Forum und freue mich gerne über Tipps und Anregungen. Ich bin nicht neu was Android angeht, aber auch kein Profi.

Ich möchte eine App erstellen, die 3 Layouts beinhaltet. Das selbst ist kein Thema. Ich habe vorher jedoch gesehen, dass es das vordefinierte Template "BottomNavigationActivity" gibt, was für meine App designmäßig sinnvoll und schön wäre.
Vordefiniert sind 3 Bereiche, genau 3 benötige ich auch. Allerdings möchte ich gerne statt jeweils einer Message, ein ganz anderes Layout benutzen. Benutze ich
Code:
setContentView(R.layout.content_config)
, kann es zwar einmalig die zweite Ansicht anzeigen, aber wenn ich auf die erste Ansicht klicke (was
Code:
setContentView(R.layout.content_main)
eigentlich wieder auf die main.xml switchen sollte), bleibt die zweite Ansicht bestehen...

Der Code der MainActivity ist in Kotlin, falls sich jemand wundern sollte.
Code:
import android.os.Bundle
import android.support.design.widget.BottomNavigationView
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_home -> {
                setContentView(R.layout.activity_main)
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_config -> {
                setContentView(R.layout.content_config)
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_help -> {
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    }
}

Und ja ich weiß, dass es schon Apps für Funksteckdosen gibt, ich möchte das aber zum Lernen von Kotlin und einem eigenen Python Server selbst schreiben . :biggrin:
 
Es sollte zwar eigentlich funktionieren (steht was im Log was Hinweis sein könnte warum es nicht geht) aber besser wäre es du würdest du für deine 3 Ansichten Fragmente machen und diese über den FragmentManager austauschen. Dazu sollte Google was ausspucken.
Dann kannst du auch schön die Business Logik der einzelnen Ansichten in die Fragments packen und musst nicht in der Activity aufpassen was du mit findviewbyid oder ähnlichem machst.
 
  • Danke
Reaktionen: exidio
Ich hab die Lösung gefunden und das möchte ich natürlich auch mit allen teilen, denn es ist einfacher als es in jedem "Tutorial" beschrieben ist, und dazu funktioniert es sogar noch!
Ich nutze Android Studio 3.0.1 mit der API 27.

import android.os.Bundle
import android.support.design.widget.BottomNavigationView
import android.support.v4.app.Fragment
import android.support.v7.app.AppCompatActivity
import android.view.MenuItem
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
SocketFragment().show()
navigation.setOnNavigationItemSelectedListener(this)
}

override fun onNavigationItemSelected(item: MenuItem) = when (item.itemId) {
R.id.navigation_home -> {
SocketFragment().show()
true
}
R.id.navigation_config -> {
ConfigFragment().show()
true
}
R.id.navigation_help -> {
HelpFragment().show()
true
}
else -> false
}

private fun Fragment.show() {
supportFragmentManager.beginTransaction().replace(R.id.container, this).commit()
}
}

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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:background="@color/colorPrimary"
tools:context="radiocontrolledsockets.api.MainActivity">

<FrameLayout
android:id="@+id/container"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/navigation"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@color/colorPrimaryDark"/>

<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="0dp"
android:layout_marginStart="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />

</android.support.constraint.ConstraintLayout>

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import kotlinx.android.synthetic.main.fragment_socket.*

class SocketFragment : Fragment() {

private var status1: Boolean = false

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater?.inflate(R.layout.fragment_socket, container, false)
}

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

button1.setOnClickListener {
switch("1", status1) {
status1 = it
}
}
}

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="radiocontrolledsockets.api.SocketFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="36dp"
android:background="@color/colorPrimaryDark">


<Button
android:id="@+id/button1"
style="@android:style/Widget.Holo.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="57dp"
android:layout_marginTop="122dp"
android:text="@string/btn_1" />

<Button
android:id="@+id/button2"
style="@android:style/Widget.Holo.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_marginStart="74dp"
android:layout_toEndOf="@+id/button1"
android:text="@string/btn_2" />

<Button
android:id="@+id/button3"
style="@android:style/Widget.Holo.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@+id/button2"
android:text="@string/btn_3" />

<Button
android:id="@+id/button4"
style="@android:style/Widget.Holo.Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/button2"
android:layout_alignTop="@+id/button3"
android:text="@string/btn_4" />

</RelativeLayout>
 
@deek
Danke für deinen Tipp! Der hat mich auf die richtige Spur gebracht.
 

Ähnliche Themen

L
Antworten
4
Aufrufe
1.337
lonnie9020
L
M
Antworten
0
Aufrufe
1.145
mglinka99
M
A
Antworten
1
Aufrufe
882
koje71
koje71
Zurück
Oben Unten