1

When I m using shared preference class as a separated class, I'm going to check the user already login or not in the navigation activity class, if it is first time then it transfer me in the login activity otherwise continue in the navigation activity

But my problem is that when I'm going to backPressed on login activity it should close the app but it transfer me in the navigation activity....pls help me...

package com.apkglobal.no_dues;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

public class Shared {
    SharedPreferences sp;
    SharedPreferences.Editor ed;
    String Filename="himanshu";
    int mode=0;
    Context context;
    String First="first";


public Shared(Context context) {
    this.context = context;
   sp=context.getSharedPreferences(Filename,mode);
    ed=sp.edit();
}


public void secondtime()
{
    ed.putBoolean(First,true);
    ed.commit();
}

public boolean firsttime()
{
    if(!this.isfirst())
    {
        Intent i=new Intent(context,LoginActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);

    }
    return false;
}

public boolean isfirst() {
    return sp.getBoolean(First,false);
}

public void getback()
{
    ed.putBoolean(First,false);
    ed.commit();
}


}

Navigationacitivity.class

package com.apkglobal.no_dues;

import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.support.design.widget.NavigationView;
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.widget.Button;
import android.widget.TextView;

import com.apkglobal.no_dues.Fragment.AboutFragment;
import com.apkglobal.no_dues.Fragment.BookDetailsFragment;
import com.apkglobal.no_dues.Fragment.FeedbackFragment;
import com.apkglobal.no_dues.Fragment.HomeFragment;
import com.apkglobal.no_dues.Fragment.MarksFragment;
import com.apkglobal.no_dues.Fragment.NoDuesFormFragment;

public class NavigationActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener{
    Button btn_mis,btn_attendence;
    Shared shared;
    String rollno;
    SharedPreferences sp;
    SharedPreferences.Editor ed;

    NavigationView navigationView;

    TextView tv_rollno;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        shared = new Shared(getApplicationContext());
        shared.firsttime();

        setContentView(R.layout.activity_navigation);

        btn_attendence = (Button) findViewById(R.id.btn_attendence);
        btn_mis=(Button)findViewById(R.id.btn_mis);
        tv_rollno = (TextView)findViewById(R.id.tv_rollno);

        navigationView = (NavigationView) findViewById(R.id.nav_view);

        View header=navigationView.getHeaderView(0);

        tv_rollno = (TextView)header.findViewById(R.id.tv_rollno);



        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);





       sp=getSharedPreferences("rajput",MODE_PRIVATE);
         rollno=sp.getString("rollno",null);


         tv_rollno.setText(rollno);





        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

              navigationView.setNavigationItemSelectedListener(this);




        defaultSelectitem(R.id.nav_homepage);



    }






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

        }

         else {


            AlertDialog.Builder ab = new AlertDialog.Builder(NavigationActivity.this);
            ab.setIcon(R.drawable.logo);
            ab.setTitle("Exit Application");
            ab.setMessage("Are You Sure ?");
            ab.setCancelable(false);
            ab.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
            ab.setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            ab.create();
            ab.show();
        }


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.navigation, 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) {
            Intent i = new Intent(getApplicationContext(), SettingActivity.class);
            startActivity(i);
        } else if (id == R.id.action_contact) {
            Intent i = new Intent(getApplicationContext(), ContactActivity.class);
            startActivity(i);
        } else if (id == R.id.action_search) {

        }

        return super.onOptionsItemSelected(item);
    }

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


        return true;
    }


    private void defaultSelectitem(int itemId) {

        Fragment fragment = null;

        switch (itemId) {
            case R.id.nav_homepage:
                fragment = new HomeFragment();
                break;

            case R.id.nav_nodues_form:
                fragment = new NoDuesFormFragment();
                break;

            case R.id.nav_feedback:
                fragment = new FeedbackFragment();
                break;

            case R.id.nav_marks:
                fragment = new MarksFragment();
                break;

            case R.id.nav_book:
                fragment = new BookDetailsFragment();
                break;

            case R.id.nav_about:
                fragment = new AboutFragment();
                break;

            case R.id.nav_fees_detail:

                            Intent intent = new Intent(NavigationActivity.this,FeesDetail.class);
             startActivity(intent);


                break;

            case R.id.nav_share:

                break;

            case R.id.nav_logout:
                shared.getback();
                Intent i = new Intent(getApplicationContext(), LoginActivity.class);
                startActivity(i);

                finish();

                break;
        }

        if (fragment != null) {
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction().replace(R.id.frame, fragment);
            fragmentTransaction.commit();

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

    }


}
1

4 Answers 4

1

You have to take Activity as a param instead of context. Then after starting the activity, you should finish the current activity.

Your code should be like this.

package com.apkglobal.no_dues;

import android.content.Intent;
import android.content.SharedPreferences;

public class Shared {
    SharedPreferences sp;
    SharedPreferences.Editor ed;
    String Filename="himanshu";
    int mode=0;
    Activity activity;
    String First="first";


public Shared(Activity activity) {
    this.activity= context;
   sp=activity.getSharedPreferences(Filename,mode);
    ed=sp.edit();
}


public void secondtime()
{
    ed.putBoolean(First,true);
    ed.commit();
}

public boolean firsttime()
{
    if(!this.isfirst())
    {
        Intent i=new Intent(activity,LoginActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        activity.startActivity(i);
        activity.finish();

    }
    return false;
}

public boolean isfirst() {
    return sp.getBoolean(First,false);
}

public void getback()
{
    ed.putBoolean(First,false);
    ed.commit();
}


}

Hope it helps:)

2
  • mark it as the correct answer. It will be helpful to others. Commented Aug 15, 2017 at 17:00
  • hey bro I want more help in my project can u help me personaly its very urgent I m beginner pls help me in project can I get your number pls Commented Aug 28, 2017 at 19:07
1

Add android:noHistory=true in your Manifest.xml for LoginActivity. With that the Login Activity will not be on the backstack.

0
1

Just add finish() to finish current activity :

if(!this.isfirst()){
    Intent i=new Intent(context,LoginActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
    finish()
}
1
  • its produce an error in the finish word public boolean firsttime() { if(!this.isfirst()) { Intent i=new Intent(context,LoginActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); finish(); } return false; } Commented Aug 15, 2017 at 17:02
0
use NavigationActivity.this instead of getApplicationContext()

shared = new Shared(NavigationActivity.this);
shared.firsttime();

and call finish(); method after startActivity();

Not the answer you're looking for? Browse other questions tagged or ask your own question.