0

Я заменяю NavigationView на фрагмент и работаю дальше с представлением. (Так как NavigationView является дочерним элементом FrameLayout)Замените NavigationView на фрагменты

При нажатии на любой элемент в NavView .. Я накладываю NavView на фрагмент. Если кто-то нажимает кнопку «Назад». Я хочу вернуться в NavView.

При замене NavigationView на фрагмент я поместил панель инструментов.

Проблема

а. Панель инструментов показывает ссылку «назад» - но это не работает.

b. На панели инструментов отображается меню «Настройки» - я НЕ хочу этого на фрагменте. Но .. я все еще хочу меню «Настройки» на панели инструментов MainActivity.

c. Панель инструментов, похоже, подпадает под StatusBar. Как разместить панель инструментов под StatusBar во Фрагменте.

Опции попытался

а. OnBackPressed метод MainActivity - fragmentManager.popUpStack()

b. onOptionsItemSelected() метод Fragment -fragmentManager.popUpStack()

c. Создано слушателя на панели инструментов, в методе OnClick: fragmentManager.popUpStack()

Скриншот: enter image description here enter image description here

Вот мой код:

MainActivity:> onNavigationItemSelected()

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_camera) { 
     // Handle the camera action 
    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    ItemsFragment fragment = new ItemsFragment(); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.nav_view, fragment); 
//    fragmentTransaction.setTransition(); 
    fragmentTransaction.addToBackStack("LeftMainNavDrawer"); 
    fragmentTransaction.commit(); 

//  DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
//  drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

Фрагмент

package com.example.deep_kulshreshtha.expandablelistnavdrawer; 

import android.content.Context; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.GridLayoutManager; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

import com.example.deep_kulshreshtha.expandablelistnavdrawer.dummy.DummyContent; 
import com.example.deep_kulshreshtha.expandablelistnavdrawer.dummy.DummyContent.DummyItem; 

import java.util.List; 

/** 
* A fragment representing a list of Items. 
* <p/> 
* Activities containing this fragment MUST implement the {@link OnListFragmentInteractionListener} 
* interface. 
*/ 
public class ItemsFragment extends Fragment { 

    // TODO: Customize parameter argument names 
    private static final String ARG_COLUMN_COUNT = "column-count"; 
    // TODO: Customize parameters 
    private int mColumnCount = 1; 
    private OnListFragmentInteractionListener mListener; 

    /** 
    * Mandatory empty constructor for the fragment manager to instantiate the 
    * fragment (e.g. upon screen orientation changes). 
    */ 
    public ItemsFragment() { 
    } 

    // TODO: Customize parameter initialization 
    @SuppressWarnings("unused") 
    public static ItemsFragment newInstance(int columnCount) { 
     ItemsFragment fragment = new ItemsFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ARG_COLUMN_COUNT, columnCount); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (getArguments() != null) { 
      mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT); 
     } 

     setHasOptionsMenu(false); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_item_list, container, false); 
     RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.list); 

     // Set the adapter 
//  if (view instanceof RecyclerView) { 
      Context context = view.getContext(); 
//   RecyclerView recyclerView = (RecyclerView) view; 

      if (mColumnCount <= 1) { 
       recyclerView.setLayoutManager(new LinearLayoutManager(context)); 
      } else { 
       recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); 
      } 

      recyclerView.setAdapter(new MyItemRecyclerViewAdapter(DummyContent.ITEMS, mListener)); 
//  } 

     Toolbar toolbar = (Toolbar) view.findViewById(R.id.itemsToolbarNavDrawer); 
     /*toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getActivity(), "Inside Toolbar click", Toast.LENGTH_LONG).show(); 
      } 
     });*/ 
     AppCompatActivity appCompatActivity = (AppCompatActivity) getActivity(); 
     appCompatActivity.setSupportActionBar(toolbar); 
     appCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     appCompatActivity.getSupportActionBar().setDisplayShowHomeEnabled(true); 

     return view; 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     menu.removeItem(R.id.action_settings); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof OnListFragmentInteractionListener) { 
      mListener = (OnListFragmentInteractionListener) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnListFragmentInteractionListener"); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mListener = null; 
    } 

    /** 
    * This interface must be implemented by activities that contain this 
    * fragment to allow an interaction in this fragment to be communicated 
    * to the activity and potentially other fragments contained in that 
    * activity. 
    * <p/> 
    * See the Android Training lesson <a href= 
    * "http://developer.android.com/training/basics/fragments/communicating.html" 
    * >Communicating with Other Fragments</a> for more information. 
    */ 
    public interface OnListFragmentInteractionListener { 
     // TODO: Update argument type and name 
     void onListFragmentInteraction(DummyItem item); 
    } 
} 

FragmentLayout файл

<LinearLayout 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:orientation="vertical" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" > 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/itemsToolbarNavDrawer" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    <android.support.v7.widget.RecyclerView 

     android:id="@+id/list" 
     android:name="com.example.deep_kulshreshtha.expandablelistnavdrawer.ItemsFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     app:layoutManager="LinearLayoutManager" 
     tools:context="com.example.deep_kulshreshtha.expandablelistnavdrawer.ItemsFragment" 
     tools:listitem="@layout/fragment_item" 
     android:background="@android:color/white"/> 

</LinearLayout> 

ответ

0

В вашей основной деятельности добавить 1 макет рамки и дать ему идентификатор в качестве контейнера. то в вашем коде Java

fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
 
     fragmentTransaction.replace(R.id.main_container,new HomeFragment()); 
 
     fragmentTransaction.commit();

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

Затем использовать этот контейнер в каждом фрагменте заменить

+0

Идея заключается в том, чтобы заменить NavigationView на Фрагмент - это работает. То, что не работает, - это .... кнопка возврата из фрагмента в NavigationView. – Deep

+0

Придется использовать null в – Rahul

+0

fragmentTransaction.addToBackStack ("null"); – Rahul

0

Я понял одно решение .. выглядит как класс в «Панели инструментов» имеет один экземпляр для всего приложения.

Когда я использовал метод onOptionsItemSelected Activity ... Я получаю элемент управления. Здесь я могу popUpStack() и перейти к NavigationView.

Однако, чтобы выяснить, как сохранить макет под статусом. : android: fitsSystemWindows = "true" ... НЕ кажется, что работает.

Смежные вопросы