Android Navigation Drawer с фрагментами, которые открывают другие субфрагменты - PullRequest
0 голосов
/ 26 сентября 2018

Я разрабатываю приложение для Android (я новичок), которое использует Навигационный ящик.Я создал несколько фрагментов, которые представляют различные элементы в боковом меню.Один из них имеет RecyclerView, и я хочу показать другой фрагмент с различными деталями, когда пользователь щелкает один из элементов RecyclerView.

Я успешно создал структуру, внедрите прослушиватель щелчков в RecyclerViewэлемент, но я не знаю, как показать фрагмент сведений (и как вернуться к нему).

Если показ другого фрагмента не является правильным, пожалуйста, предложите мне лучший способ получить навигациючто мне нужно.

КОД

MenuActivity.xml

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout
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:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimaryDark"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        app:titleTextColor="@android:color/white"/>

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/toolbar"/>

</RelativeLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/navigationView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/drawer_view"
    app:headerLayout="@layout/nav_header"/>

MenuActivity.kt

class MenuActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

val vendutoFragment = VendutoFragment()
val prezziFragment = PrezziFragment()
val giacenzeFragment = GiacenzeFragment()


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

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

    navigationView.setNavigationItemSelectedListener(this)

    if(savedInstanceState == null){
        addFragment(vendutoFragment)
        navigationView.setCheckedItem(nav_venduto)
    }
}

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

override fun onNavigationItemSelected(item: MenuItem): Boolean {
    var selectedFragment = Fragment()
    when (item.itemId) {
        R.id.nav_venduto -> {
            selectedFragment = vendutoFragment
        }
        R.id.nav_prezzi -> {
            selectedFragment = prezziFragment
        }
        R.id.nav_giacenze -> {
            selectedFragment = giacenzeFragment
        }
    }

    replaceFragment(selectedFragment)

    drawerLayout.closeDrawer(GravityCompat.START)
    return true
}

private fun addFragment(fragment: Fragment){
    supportFragmentManager.beginTransaction().add(R.id.frameLayout, fragment).commit()
}

private fun replaceFragment(fragment: Fragment){
    supportFragmentManager.beginTransaction().replace(R.id.frameLayout, fragment).commit()
}

}

1-й фрагмент с RecyclerView и интерактивным элементом

class GiacenzeFragment: Fragment(){
var global: Global? = null

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?
{
    //returning our layout file
    //change R.layout.yourlayoutfilename for each of your fragments
    return inflater.inflate(R.layout.fragment_giacenze, container, false)
}

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

    //you can set the title for your toolbar here for different fragments different titles
    activity!!.title = "Giacenze"
}

override fun onActivityCreated(savedInstanceState: Bundle?)
{
    super.onActivityCreated(savedInstanceState)

    giacenzeTable.layoutManager = LinearLayoutManager(context) as RecyclerView.LayoutManager?

    global = getActivity()?.getApplication() as Global

    // Access the RecyclerView Adapter and load the data into it
    giacenzeTable.adapter = GiacenzeTableAdapter(global!!.prodotti, { prodotto: Prodotto -> prodottoItemClicked(prodotto) })
}

private fun prodottoItemClicked(prodotto: Prodotto)
{
    Toast.makeText(context, "Clicked: ${prodotto.name}", Toast.LENGTH_SHORT).show()

    var serbatoiFrag =  SerbatoiFragment()
    serbatoiFrag.idProdotto = prodotto.idProdotto
    serbatoiFrag.nameProdotto = prodotto.name

    fragmentManager?.beginTransaction()!!.replace(R.id.frameLayout, serbatoiFrag).commit()

}

} ​​

1 Ответ

0 голосов
/ 26 сентября 2018

, если вы хотите загрузить фрагмент в новом действии, просто откройте новое действие и используйте replaceFragment
, если вы хотите загрузить то же действие, просто используйте replaceFragment
знаете ли вы, как использовать replaceFragment * * 1005

...