Ir ao conteúdo
  • Cadastre-se

Java Android Studio: Utilizar MenuItem fora da MainActivity


Posts recomendados

Estou utilizando o NavigatorLayout que permite criar um menu lateral retrátil semelhante ao utilizado na PlayStore/Twitter. Os métodos dessa classe estão funcionais e consigo utilizar o navigationItemSelected normalmente.

O projeto é uma rede social, quando o usuário estiver no Feed o menu lateral exibirá a opção "Perfil" que guiará o usuário para o seu Perfil, quando o usuário estiver no Perfil o mesmo botão que ele clicou anteriormente agora se chama "Feed" e o redireciona de volta para o Feed da aplicação. Essa função é um onClickListener relacionado ao menu lateral.   

 private NavigationView.OnNavigationItemSelectedListener navigationItemSelected = new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

            switch(menuItem.getItemId()){
                case R.id.nav_home:
                    if(altNumber == 0){

                        menuItem.setTitle("Perfil");
                        altNumber = 1;
                        changePage(getSupportFragmentManager(), new FeedFragment());
                        // Log.d("CurrentFragment", getCurrentFragment(getSupportFragmentManager()).toString());
                        
                    }

                    else{
                        menuItem.setTitle("Feed");
                        altNumber = 0;
                        changePage(getSupportFragmentManager(),
                                new ProfileFragment(UserController.getInstance().getAuth().getCurrentUser().getUid()));
                        //  Log.d("CurrentFragment", getCurrentFragment(getSupportFragmentManager()).toString());
                        
                    }
                  
                    break;

                case R.id.nav_logout:

                    UserController.getInstance().getAuth().signOut();
                    Intent a = new Intent(getApplicationContext(), FirstActivity.class);
                    startActivity(a);
                    finish();
                    break;

                case R.id.nav_tools:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();

                    break;

                case R.id.nav_gallery:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                case R.id.nav_slideshow:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                case R.id.nav_send:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                case R.id.nav_share:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                default:
                    throw new IllegalStateException("Unexpected value: " + menuItem.getItemId());
            }

            return true;
        }


No Feed os posts informam o usuário responsável pela publicação, é possível clicar no nome desse usuário e ser redirecionado para o Perfil correspondente. Agora aqui mora o problema, eu quero que o botão do Menu "Perfil" altere o nome para "Feed" nesse onClick também. 

Porém o menuItem só é visível em MainActivity, a View só enxerga o que ela abrange, até onde sei não é possível pois a viewPost não abrange o botão do menu, são estruturas separadas. Se tento utilizar o findViewByid para encontrar o botão do menu dentro de Post recebo uma null reference.

Também tentei criar um método estático dentro da MainActivity porém não é possível instanciar view dentro dela, pois não é possível criar views estáticas. Talvez a única solução seja passar a view como parâmetro, mas isso volta para a tentativa anterior. Como referenciar o menuItem fora da classe principal?

Parte da Classe do Post

    public class PostAdapter extends RecyclerView.Adapter<PostAdapter.ViewHolder> implements ManageData  {

    private final List<Post> mValues;
    private final OnListFragmentInteractionListener mListener;
    private final Context ctx;


    public PostAdapter(Context ctx, List<Post> items, OnListFragmentInteractionListener listener) {
        mValues = items;
        mListener = listener;
        this.ctx = ctx;

    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.fragment_post_item, parent, false);
        return new ViewHolder(view);
    }


    @Override
    public void onBindViewHolder(@NonNull final PostAdapter.ViewHolder holder, final int position) {

        UserController.getInstance().getUserData(this, mValues.get(position).getUid(),
                "nome de usuário", holder.nome de usuário);

        if (!mValues.get(position).getPublisher_Id().equals(mValues.get(position).getUid())){
            UserController.getInstance().getUserData(this, mValues.get(position).getPublisher_Id(),
                    "nome de usuário", holder.publisherName); //pegar nome do publisher

            holder.publisherName.setText(holder.publisherName.getText().toString() + " " + mValues.get(position).getPublisher_description());
        }

        UserController.getInstance().getUserData(this, mValues.get(position).getUid(), "image", holder.post_image_profile);

        holder.description.setText(mValues.get(position).getDescription());

        holder.likes.setText(mValues.get(position).getLikes());


        holder.n_comments.setText(mValues.get(position).getnComments());

        LikeController.getInstance().checkLike(mValues.get(position), holder.btn_like);
        holder.btn_like.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (holder.btn_like.getTag().equals("Like")){

                    LikeController.getInstance().setLike(mValues.get(position), holder.likes, false);
                    holder.btn_like.setImageResource(R.drawable.ic_feed_like2);
                    holder.btn_like.setTag("Liked");
                }
                else{
                    LikeController.getInstance().setLike(mValues.get(position), holder.likes, true);
                    holder.btn_like.setImageResource(R.drawable.ic_feed_like1);
                    holder.btn_like.setTag("Like");
                }

            }
        });

        
        //O clickListener que redireciona para o perfil do publisher do Post
        
        holder.nome de usuário.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String post_Uid = mValues.get(position).getUid();
                String current_User = UserController.getInstance().getAuth().getCurrentUser().getUid();

                ProfileFragment pf = new ProfileFragment(post_Uid);
                FragmentManager fm = ((AppCompatActivity)ctx).getSupportFragmentManager();

                PageController.changePage(fm, pf);
                PageController.switchName();//tentativa falha de usar um método estático

                if(current_User.equals(post_Uid)){

                }

                Log.d("TAG", "Clicou no botão");
            }
        });

        if (mValues.get(position).getPostImage() != null){

            FirebaseStorage storage = FirebaseStorage.getInstance();
            StorageReference storageRef = storage.getReference();
            StorageReference imagesRef = storageRef.child("Posts");
            
            Glide.with(ctx)
                    .load(mValues.get(position).getPostImage())
                    .into(holder.postImage);
           
        }
        else{
            Log.d("Deu ruim", "Não carregou");
        }

        holder.mView.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                if(mListener != null){
                    mListener.onListFragmentInteraction(holder.mItem);

                }
            }
        });

    }

Classe principal que gerencia o menu

    public class PageController extends AppCompatActivity implements ManageData {

    private AppBarConfiguration mAppBarConfiguration;
    private static int altNumber = 1;

    private NavigationView navView = (NavigationView) findViewById(R.id.nav_view);


    public View mView = findViewById(R.id.nav_home);

    private View getView(){
        return navView;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                changePage(getSupportFragmentManager(), new newPostFragment());

            }
        });
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
                R.id.nav_tools, R.id.nav_share, R.id.nav_send)
                .setDrawerLayout(drawer)
                .build();

        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);

        navView.setNavigationItemSelectedListener(navigationItemSelected);


        getSupportFragmentManager().beginTransaction().replace(R.id.nav_host_fragment,
                new FeedFragment()).commit();

        Log.d("Fragments", getSupportFragmentManager().getFragments().toString());

        //PageController.getInstance().changePage(getSupportFragmentManager(), new FeedFragment());
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        TextView username = findViewById(R.id.header_username);
        TextView email = findViewById(R.id.header_email);
        ImageView profile = findViewById(R.id.header_profile);


        UserController.getInstance().getUserData(this, UserController.getInstance().getAuth().getCurrentUser().getUid(),"username", username);
        UserController.getInstance().getUserData(this, UserController.getInstance().getAuth().getCurrentUser().getUid(),"email", email);
        UserController.getInstance().getUserData(this, UserController.getInstance().getAuth().getCurrentUser().getUid(),"image", profile);

        return true;
    }


    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }


    @Override
    public void manageData(Object data, Object view) {
        if (view instanceof ImageView){
            Glide.with(this.getBaseContext())
                    .load(data)
                    .into((ImageView)view);

            //holder.postImage.setContentDescription("Teste");
            if(data != null)
                Log.d("change imageView", "PageController " + data.toString());
            else
                Log.d("change imageView", "PageController null");
        }
        else if ( view instanceof TextView){
            ((TextView) view).setText((String) data);
            Log.d("change TextView", "PageController " + (String) data);
        }

        else{
            Log.d("failed change", "PageController " + view + " cannot be found");
        }
    }

    public static void changePage(FragmentManager fm, Fragment selectedFragment){

        for (Fragment frag : fm.getFragments()){
            if (frag != null){
                if(frag.isVisible()) {
                    FragmentTransaction fragmentTransaction = fm.beginTransaction();
                    fragmentTransaction.replace(frag.getId(), selectedFragment);
                    fragmentTransaction.commit();
                }
            }

        }
    }

    public static Fragment getCurrentFragment(FragmentManager fm){
        for (Fragment frag : fm.getFragments()){
            if (frag != null){
                if(frag.isVisible()) {
                    return frag;
                }
            }

        }
        return null;
    }


    private NavigationView.OnNavigationItemSelectedListener navigationItemSelected = new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

            switch(menuItem.getItemId()){
                case R.id.nav_home:
                    if(altNumber == 0){

                        menuItem.setTitle("Perfil");
                        altNumber = 1;
                        changePage(getSupportFragmentManager(), new FeedFragment());
                        // Log.d("CurrentFragment", getCurrentFragment(getSupportFragmentManager()).toString());

                    }

                    else{
                        menuItem.setTitle("Feed");
                        altNumber = 0;
                        changePage(getSupportFragmentManager(),
                                new ProfileFragment(UserController.getInstance().getAuth().getCurrentUser().getUid()));
                        //  Log.d("CurrentFragment", getCurrentFragment(getSupportFragmentManager()).toString());

                    }

                    break;

                case R.id.nav_logout:

                    UserController.getInstance().getAuth().signOut();
                    Intent a = new Intent(getApplicationContext(), FirstActivity.class);
                    startActivity(a);
                    finish();
                    break;

                case R.id.nav_tools:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();

                    break;

                case R.id.nav_gallery:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                case R.id.nav_slideshow:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                case R.id.nav_send:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                case R.id.nav_share:
                    Toast.makeText(getApplicationContext(), "Função não implementada", Toast.LENGTH_LONG).show();
                    break;

                default:
                    throw new IllegalStateException("Unexpected value: " + menuItem.getItemId());
            }

            return true;
        }
    };}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!