我是安卓系统的新手。我正在创建简单的应用程序。在我的家尖叫有Viewpager&带有2个片段的tabstrip。在每个片段中都有一个列表视图。
问题是,当按下两次后退按钮时,会显示白色屏幕,在白色屏幕中再按下一次后退按钮退出。
我不知道我的错误在哪里。
活动代码如下所示。
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));
}
}
代码中的问题是:
@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);
}
当您第一次按下back时,exit为false,因此super.onBackPressed不会被调用。
只需将此代码替换为:
@Override
public void onBackPressed() {
super.onBackPressed();
//finish();
}
或者,如果您在后按时没有得到任何事件,而只想完成活动,则删除该方法。