Navigation drawer with Fragments and tabs

0

I have a MenuLateral class that is the Navigation Drawer, a ContainerFragment, and an AdapterSection. In Adapter section is where are the methods that receive the parameters for the insertion of fragments and titles of the ContainerFragment class.

Code of the ContainerFragment class:

package com.example.bruno.proyecto.Fragmentos;
//Clase ContenedorFragments
import android.content.Context;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
import android.support.design.widget.TabLayout;

import com.example.bruno.proyecto.Adaptador.SeccionAdaptador;
import com.example.bruno.proyecto.R;
import com.example.bruno.proyecto.clases.Utilidades;

/**
 * A simple {@link Fragment} subclass.
 * Activities that contain this fragment must implement the
 * {@link ContenedorFragment.OnFragmentInteractionListener} interface
 * to handle interaction events.
 * Use the {@link ContenedorFragment#newInstance} factory method to
 * create an instance of this fragment.
 */

public class ContenedorFragment extends Fragment {
private OnFragmentInteractionListener mListener;
//Declaracion de propiedades
private AppBarLayout AppBar;
private TabLayout Pestañas;
private ViewPager viewPager;
View vistas; //Puente entre referencias actividad y fragments

public ContenedorFragment() {
    // Required empty public constructor
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @param param1 Parameter 1.
 * @param param2 Parameter 2.
 * @return A new instance of fragment ContenedorFragment.
 */
// TODO: Rename and change types and number of parameters
public static ContenedorFragment newInstance(String param1, String param2) {
    ContenedorFragment fragment = new ContenedorFragment();
    Bundle args = new Bundle();
    return fragment;
}

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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    //Referencias
    vistas = inflater.inflate(R.layout.fragment_contenedor, container, false);

    if (Utilidades.rotacion==0)
    {
        View parent = (View) container.getParent(); //casting
        //Validacion para que se instancie el appbar
        if (AppBar == null)
        {
            AppBar = (AppBarLayout) parent.findViewById(R.id.id_AppBar); // Se crea el AppBar
            Pestañas = new TabLayout (getActivity()); // Instancia para la pestaña
            //Pestañas.setTabTextColors(Color.parseColor("#FFFF"), Color.parseColor("#FFFF"));// Color para las pestañas
            AppBar.addView(Pestañas); //Se agregan las pestañas a AppBar
            viewPager = (ViewPager) vistas.findViewById(R.id.idViewPagerInformacion); //Vincula la logica de navegacion con los fragments y gestos de arraste de pantalla
            LLenarViewPager(viewPager);//Llamado al metodo que se encargar de llenar el contenedor con los fragmentos

            // Evento para arrastar la pantalla
            viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()
            {
                // Metodo que se encarga de agregar scroll o llamado a pantalla

                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                    super.onPageScrolled(position, positionOffset, positionOffsetPixels);
                }
            });
            Pestañas.setupWithViewPager(viewPager);
        }
    Pestañas.setTabGravity(TabLayout.GRAVITY_FILL);
    }else
        Utilidades.rotacion=1;

    return vistas;
}

private void LLenarViewPager(ViewPager viewPager) {
    SeccionAdaptador Adaptador = new SeccionAdaptador(getFragmentManager());
    Adaptador.addFragment(new SensorFragment(), "Puertas "); // LLama a los fragmentos para las pestañas
    Adaptador.addFragment(new MotorFragment(), "Motor "); // LLama a los fragmentos para las pestañas
    Adaptador.addFragment(new EventosFragment(), "Eventos "); // LLama a los fragmentos para las pestañas

    viewPager.setAdapter(Adaptador);
}

// TODO: Rename method, update argument and hook method into UI event
public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

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

@Override
public void onDestroyView() {
    super.onDestroyView();
    if (Utilidades.rotacion==0)
    {
        AppBar.removeView(Pestañas);
    }

}

@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 OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
}
}

MenuLateral class code:

// Clase MenuLateral 
package com.example.bruno.proyecto;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

import com.example.bruno.proyecto.Fragmentos.ContenedorFragment;
import com.example.bruno.proyecto.Fragmentos.EventosFragment;
import com.example.bruno.proyecto.Fragmentos.MotorFragment;
import com.example.bruno.proyecto.Fragmentos.SensorFragment;

public class MenuLateral extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {
        private Button mSalir;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu_lateral);
    //mSalir = (Button) findViewById(R.id.Bt_Salir);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);/* Inicializa el elemento del panel lateral de navegación
    (activity_menu_lateral) */
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);/*Inicializa el elemento del panel lateral de navegación
            (activity_menu_lateral) */
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    Fragment Menu = new SensorFragment();
    getSupportFragmentManager().beginTransaction().add(R.id.content_menu_lateral, Menu).commit();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); /*Inicializa el elemento del panel lateral de navegación
    (activity_menu_lateral) */
    navigationView.setNavigationItemSelectedListener(this);

}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_lateral, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

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

    // Logica de asignacion de los fragments cuando seleciona un item
       Fragment miFragment = null;
        boolean FragmentSelccionado = false;
    if (id == R.id.idAlarma) {
        miFragment = new ContenedorFragment();
        FragmentSelccionado = true;
    } else if (id == R.id.idMonitoreo) {
        miFragment = new MotorFragment();
        FragmentSelccionado = true;
    } else if (id == R.id.idEventos) {
        miFragment = new EventosFragment();
        FragmentSelccionado = true;
    } else if (id == R.id.idHerramientas) {

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

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

    }
    // Coloca el fragments seleccionado en la pantalla principal
    if (FragmentSelccionado == true)
    {
        getSupportFragmentManager().beginTransaction().replace(R.id.content_menu_lateral, miFragment).commit();
    }

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

When I run the application in Android Studio, and I click on Alarm, I get the following error:

Constructive criticism welcome.!

    
asked by Bruno Soto 15.01.2018 в 11:39
source

0 answers