1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. exidio, 06.12.2017 #1
    exidio

    exidio Threadstarter Neuer Benutzer

    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:
     
  2. deek, 06.12.2017 #2
    deek

    deek Android-Experte

    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.
     
    exidio gefällt das.
  3. exidio, 07.12.2017 #3
    exidio

    exidio Threadstarter Neuer Benutzer

    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>
     
  4. exidio, 07.12.2017 #4
    exidio

    exidio Threadstarter Neuer Benutzer

    @deek
    Danke für deinen Tipp! Der hat mich auf die richtige Spur gebracht.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] App Version vom Play Store ermitteln um eine Updateerinnerung anzuzeigen Android App Entwicklung 01.12.2017
[ERLEDIGT] Shine Animation auf Text Android App Entwicklung 20.10.2017
[ERLEDIGT] Wandernder Text Android App Entwicklung 17.10.2017
[ERLEDIGT] Warum bekomme ich hier eine NullPointerException Android App Entwicklung 07.10.2017
[ERLEDIGT] APK compilieren ... beschädigt? Android App Entwicklung 06.10.2017
[ERLEDIGT] Benutzer Aktivitäten überwachen Android App Entwicklung 30.09.2017
[ERLEDIGT] Komplexe View erstellen Android App Entwicklung 13.09.2017
[Offen] Android Layout funktioniert nicht Android App Entwicklung 08.09.2017
[ERLEDIGT] Alpha-Version meiner App nicht mit S8 kompatibel Android App Entwicklung 06.09.2017
Du betrachtest das Thema "[ERLEDIGT] Verschiedene Layouts in BottomNavigationActivity verwalten" im Forum "Android App Entwicklung",