Переключение фрагментов с помощью onClickListener - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть «домашняя страница» в моем приложении, которая выглядит следующим образом

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

class HomeActivity: Fragment() {


    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view: View = inflater.inflate(R.layout.activity_home, container, false)

        return  view
    }

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

        ButtonAddition.setOnClickListener{

        }
    }



}

У меня есть mainActivity, в котором есть следующий код

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

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

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


        val toggle = ActionBarDrawerToggle(
            this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close
        )
        drawer_layout.addDrawerListener(toggle)
        toggle.syncState()

        nav_view.setNavigationItemSelectedListener(this)
        displayScreen(-1)
    }

    override fun onBackPressed() {
        if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
            drawer_layout.closeDrawer(GravityCompat.START)
        } else {
            super.onBackPressed()
        }
    }

    private fun displayScreen(id: Int) {
        val fragment: Fragment = when (id) {

            R.id.home -> {
                HomeActivity()
            }
            R.id.record -> {
                HomeActivity()
            }
            R.id.pro -> {
                HomeActivity()
            }
            R.id.about -> {
                HomeActivity()
            }
            else -> {
                HomeActivity()
            }
        }

        supportFragmentManager.beginTransaction()
            .replace(R.id.relativelayout, fragment)
            .commit()

    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        displayScreen(item.itemId)
        drawer_layout.closeDrawer(GravityCompat.START)
        return true
    }

}

У меня также естьфрагмент "AdditionSplash", на который я пытаюсь перейти, используя следующий код

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

class AdditionSplash: Fragment() {


    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view: View = inflater.inflate(R.layout.activity_addition_splash, container, false)

        return view
    }
}

на фрагменте домашней страницы. У меня есть onclicklistener, и я хочу использовать его для переключения на фрагмент additionsplash изФрагмент домашней страницы.(я не хочу использовать этот навигационный ящик, который у меня есть для этого) Я могу заставить это работать, если я изменю фрагмент дополнения-всплеска на действие и использую намерения, но я не могу переключиться на фрагмент из фрагмента.Это невозможно сделать?Я хочу использовать эту кнопку, чтобы просто перейти к другому фрагменту.

вот решение, которое я нашел, благодаря предложению

В основном задании, которое я сделал:

fun chooseActivity(view: View){
        val buttonClicked = view as Button
        val fragment: Fragment = when (buttonClicked.id) {

            R.id.ButtonAddition -> {
                AdditionSplash()
            }

            else -> {
                HomeActivity()
            }
        }
        supportFragmentManager.beginTransaction()
            .replace(R.id.relativelayout, fragment)
            .commit()
    }

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете просто вызвать его из активности хоста вашего фрагмента, как вы делали это в своей MainActivity:

activity?.supportFragmentManager.beginTransaction()
            .replace(R.id.relativelayout, fragment)
            .commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...