简体   繁体   English

两次退出时,Android应用显示白屏

[英]Android app shows white screen when twice to exit

I m new to android. 我是android新手。 I am create simple app. 我正在创建简单的应用程序。 In my home Screeen that have Viewpager & tabstrip with 2 fragment. 在我家的Screeen中,有Viewpager和带有2个片段的Tabstrip。 In each fragment has a listview. 在每个片段中都有一个列表视图。

The problem is that when press back button 2 times then shows the white screen, and In the white screen press 1 time more back button for exit. 问题在于,当按下返回按钮2次后,将显示白色屏幕,而在白色屏幕中,再按1次返回按钮即可退出。

I don't know where is my mistake. 我不知道我的错误在哪里。

Activity Code is give below. 活动代码如下。

   package com.example.view;

    import android.content.DialogInterface;
    import android.content.Intent;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.os.Handler;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.support.v7.app.AlertDialog;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.TextView;

    import com.astuetz.PagerSlidingTabStrip;
    import com.example.adapter.ViewPagerAdapter;
    import com.example.cardholder.BaseActivity;
    import com.example.cardholder.R;
    import com.example.service.DownloadService;

    import com.example.service.UploadService;

    public class HomeActivity extends BaseActivity implements OnPageChangeListener {

    Toolbar toolbar;
    // TextView _TextViewToolbar;
    ViewPager pager;
    ViewPagerAdapter adapter;
    CharSequence Titles[] = { "Card Holder", "Contacts" };
    int Numboftabs = 2;
    private Boolean exit = false;

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

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        // _TextViewToolbar = (TextView)
        // toolbar.findViewById(R.id.toolbar_title);

        setSupportActionBar(toolbar);

        adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles,
                Numboftabs);

        pager = (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(adapter);
        pager.setOnPageChangeListener(this);

        PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);

        // tabs.setShouldExpand(true);
        tabs.setDividerPadding(2);
        tabs.setDividerColor(getResources().getColor(R.color.colorPrimary));
        tabs.setTextColor(Color.WHITE);
        tabs.setIndicatorHeight(4);
        tabs.setIndicatorColor(Color.WHITE);
        // tabs.setIndicatorColor(getResources().getColor(R.color.colorPrimaryDark));

    }

    private void logOut() {

        logOutSharedPreference();
        Intent intent = new Intent(HomeActivity.this, LoginActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }

    @Override
    public void onBackPressed() {

        if (exit) {
            super.onBackPressed();

        } else {

            showToast(HomeActivity.this, "Press Back again to Exit.");
            this.exit = true;

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    exit = false;
                }
            }, 2000);
        }

        /*AlertDialog.Builder builder = new AlertDialog.Builder(this,
                R.style.AppCompatAlertDialogStyleMsgAlert);
        builder.setMessage("Are You Sure Want To Close ? ");

        builder.setCancelable(true);
        builder.setPositiveButton("OK",
                new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog,
                            int which) {
                        HomeActivity.this.finish();
                    }
                });


        builder.show();*/
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.account_setting:
            Intent _IntentAccountSetting = new Intent(HomeActivity.this,
                    AccountSettingActivity.class);
            startActivity(_IntentAccountSetting);
            break;

        case R.id.logout:
            logOut();
            HomeActivity.this.finish();
            break;

        case R.id.upload:
            if (!isInternetConnect()) {

                AlertDialog.Builder builder = new AlertDialog.Builder(this,
                        R.style.AppCompatAlertDialogStyleMsgAlert);
                builder.setMessage("Required Internet Connection.");

                builder.setCancelable(true);
                builder.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // continue with delete
                            }
                        });

                builder.show();

            } else {

                AlertDialog.Builder builder = new AlertDialog.Builder(this,
                        R.style.AppCompatAlertDialogStyleMsgAlert);
                builder.setMessage("Are You Sure Want To Upload Data From "
                        + getEmail(HomeActivity.this) + " ?");

                builder.setCancelable(true);
                builder.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog,
                                    int which) {
                                Intent i1 = new Intent(HomeActivity.this,
                                        UploadService.class);
                                startService(i1);
                            }
                        });

                builder.setNegativeButton("CANCLE",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                dialog.dismiss();

                            }
                        });

                builder.show();
            }
            break;

        case R.id.download:
            if (!isInternetConnect()) {

                AlertDialog.Builder builder = new AlertDialog.Builder(this,
                        R.style.AppCompatAlertDialogStyleMsgAlert);
                builder.setMessage("Required Internet Connection.");

                builder.setCancelable(true);
                builder.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog,
                                    int which) {

                                dialog.dismiss();
                            }
                        });

                builder.show();

            } else {

                AlertDialog.Builder builder = new AlertDialog.Builder(this,
                        R.style.AppCompatAlertDialogStyleMsgAlert);
                builder.setMessage("Are You Sure Want To Download Data From "
                        + getEmail(HomeActivity.this) + " ?");

                builder.setCancelable(true);
                builder.setPositiveButton("OK",
                        new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface dialog,
                                    int which) {

                                Intent i1 = new Intent(HomeActivity.this,
                                        DownloadService.class);
                                startService(i1);
                            }
                        });

                builder.setNegativeButton("CANCLE",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                dialog.dismiss();

                            }
                        });

                builder.show();
            }
            break;

        case R.id.delete_cardholder:
            Intent _IntentDeleteActivity = new Intent(HomeActivity.this,CardHoderDeleteActivity.class);
            startActivity(_IntentDeleteActivity);

        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageSelected(int position) {
        // TODO Auto-generated method stub
        setTitle(adapter.getPageTitle(position));

    }
}

The problem in your code is this: 您的代码中的问题是这样的:

@Override
public void onBackPressed() {

    if (exit) {
        super.onBackPressed();
    } else {

        showToast(HomeActivity.this, "Press Back again to Exit.");
        this.exit = true;

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                exit = false;
            }
        }, 2000);
    }

When you press back the first time, exit is false so super.onBackPressed is not called. 第一次按下时,退出为false,因此不会调用super.onBackPressed。

Just replace this code to: 只需将此代码替换为:

@Override
public void onBackPressed() {
    super.onBackPressed();
    //finish();
}

or remove the method if you are not getting any event on back press and just want to finish the activity. 或取消方法,如果您没有在按下时收到任何事件,而只想完成该活动。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM