Как придать функциональность выбору меню навигации? - PullRequest
0 голосов
/ 03 января 2019

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

В настоящее время на MainActivity (приборная панель / домашний экран) приложения у меня есть кнопка, которая в основном выходит из системы пользователя, который я использую, с помощью следующего кода.

    Button logoutBtn = findViewById(R.id.btnLogout);

    logoutBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            session.logoutUser();
            Intent i = new Intent(MainActivity.this, LoginActivity.class);
            startActivity(i);
            finish();

        }
    });

Пользовательский интерфейс:

Logout Button

Приведенный выше код работает, как и ожидалось, при выходе пользователя из системы и перенаправлении его на страницу входа / регистрации. Теперь я начинаю пытаться реализовать обнаруженную мной боковую навигацию (https://antonioleiva.com/materialize-app/)) и пытаюсь выяснить, как передать функциональность вышеуказанной кнопки элементу меню навигации, как показано ниже;

enter image description here

Пример боковой навигации, который я использую, имеет следующий код, который в основном представляет уведомление, чтобы показать, какой пункт меню боковой навигации выбран;

private void setupDrawerLayout() {
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    navigationView = (NavigationView) findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            Snackbar.make(content, menuItem.getTitle() + " pressed", Snackbar.LENGTH_LONG).show();
            menuItem.setChecked(true);
            drawerLayout.closeDrawers();
            return true;
        }
    });
}

Это представляет следующее;

enter image description here

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

Заранее спасибо ТАК.

Полный код для домашнего экрана (MainActivity.java) приведен ниже;

package com.antonioleiva.materializeyourapp;

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.design.widget.Snackbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements 
RecyclerViewAdapter.OnItemClickListener {
private SessionHandler session;
private static List<ViewModel> items = new ArrayList<>();
private DrawerLayout drawerLayout;
private View content;
private RecyclerView recyclerView;
private NavigationView navigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    session = new SessionHandler(getApplicationContext());
    User user = session.getUserDetails();
    TextView dashboardText = findViewById(R.id.dashboardText);
    dashboardText.setText("Welcome to gluca, " + user.getFullName() + "!");

    initRecyclerView();
    initFab();
    initToolbar();
    setupDrawerLayout();

    Button logoutBtn = findViewById(R.id.btnLogout);

    logoutBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            session.logoutUser();
            Intent i = new Intent(MainActivity.this, LoginActivity.class);
            startActivity(i);
            finish();

        }
    });

    content = findViewById(R.id.content);

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        setRecyclerAdapter(recyclerView);
    }
}

@Override
public void onEnterAnimationComplete() {
    super.onEnterAnimationComplete();
    setRecyclerAdapter(recyclerView);
    recyclerView.scheduleLayoutAnimation();
}

private void initRecyclerView() {
    recyclerView = (RecyclerView) findViewById(R.id.recycler);
    recyclerView.setLayoutManager(new GridLayoutManager(this, 2));

}

private void setRecyclerAdapter(RecyclerView recyclerView) {
    RecyclerViewAdapter adapter = new RecyclerViewAdapter(items);
    adapter.setOnItemClickListener(this);
    recyclerView.setAdapter(adapter);
}

private void initFab() {
    findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Snackbar.make(content, "FAB Clicked", Snackbar.LENGTH_SHORT).show();
        }
    });
}

private void initToolbar() {
    final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    final ActionBar actionBar = getSupportActionBar();

    if (actionBar != null) {
        actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

private void setupDrawerLayout() {
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    navigationView = (NavigationView) findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            Snackbar.make(content, menuItem.getTitle() + " pressed", Snackbar.LENGTH_LONG).show();
            menuItem.setChecked(true);
            drawerLayout.closeDrawers();
            return true;
        }
    });
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            drawerLayout.openDrawer(GravityCompat.START);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onItemClick(View view, ViewModel viewModel) {
    DetailActivity.navigate(this, view.findViewById(R.id.image), viewModel);
}
}

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Ниже приведен пример кода для прямого выхода из системы из меню

ПРИМЕЧАНИЕ. Нет необходимости открывать новое действие или фрагмент для выхода из системы.

Вот код:

 @Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    if (id == R.id.nav_home) {
        fragment = new HomeFragment();
        title.setText(pref.getString(Constants.REGIS_FIRST_NAME, "")+" "+pref.getString(Constants.REGIS_LAST_NAME, ""));
    }
    if (id == R.id.nav_profile) {
        fragment = new ProfileFragment();
        title.setText("My Profile ");
    }
    if (id == R.id.nav_past) {
        fragment = new PastFragment();
        title.setText("Past Ceremony ");
    } 
     else if (id == R.id.nav_logout) {
        callLogout(); //logout here
    }

Вот код диалога:

 private void callLogout() {
    final Dialog dialog1;
    dialog1 = new Dialog(MainActivity.this);
    dialog1.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog1.setCancelable(false);
    dialog1.setContentView(R.layout.logout_dilaog);

    final TextView logoutTxt, yes, no;
    yes = dialog1.findViewById(R.id.yes);
    no = dialog1.findViewById(R.id.no);
    logoutTxt = dialog1.findViewById(R.id.logoutTxt);

    Log.e("NAME", "" + pref.getString("USER_NAME_LOGIN", ""));
    logoutTxt.setText("Are you sure to logout ?");

    yes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editor = pref.edit();
            editor.clear();
            editor.apply();
            // utils.showtoast("Logout");
            finish();

            Intent intent = new Intent(MainActivity.this, LoginActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
        }
    });

    no.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog1.dismiss();
        }
    });
    dialog1.show();
}

logout_dialog.xml

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:layout_marginTop="10dp"
    android:gravity="center_horizontal"
    android:textSize="16dp"
    android:fontFamily="@font/lato_semibold"
    android:id="@+id/logoutTxt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/black" />

<LinearLayout
    android:gravity="right"
    android:layout_marginTop="15dp"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/yes"
        android:layout_marginRight="15dp"
        android:layout_width="90dp"
        android:layout_height="30dp"
        android:text="YES"
        android:fontFamily="@font/lato_regular"
        android:gravity="center"
        android:textColor="@color/white"
        android:textSize="14dp"
        android:background="@drawable/ripple_btn"
        />

    <TextView
        android:layout_marginRight="15dp"
        android:id="@+id/no"
         android:layout_width="90dp"
        android:layout_height="30dp"
         android:text="NO"
        android:fontFamily="@font/lato_regular"
        android:gravity="center"
         android:textColor="@color/white"
        android:textSize="14dp"
        android:background="@drawable/ripple_btn"
        />


</LinearLayout>

0 голосов
/ 03 января 2019

Что если вы передадите действия выхода из системы новой функции, скажем, logout (), и вы поместите внутрь session.logoutUser(); Intent i = new Intent(MainActivity.this, LoginActivity.class); startActivity(i); finish();

Затем внутри функции onOptionsItemSelected вы добавляете проверку регистра case (menuItem.getTitle =="Logout") {lougout();}

Конечно, это просто идея, но вы можете уточнить ее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...