カスタマイズしたアラートダイアログを最初に表示してアプリを終了し、ユーザーが終了するかどうかを確認します。以下のコードでエラーが発生しています。ちなみに、アクティビティはアクティビティグループ内にあるため、getparent()を使用しました。
@Override
public void onBackPressed() {
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.grocerylistdelete, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getParent());
builder.setView(view);
Button yes = (Button) view.findViewById(R.id.buttonYes);
yes.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
});
Button no = (Button) view.findViewById(R.id.buttonNo);
no.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), RecipeList.class);
finish();
startActivity(i);
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
LogCatのエラーは次のとおりです。
10-01 11:45:39.795: E/AndroidRuntime(1549): FATAL EXCEPTION: main
10-01 11:45:39.795: E/AndroidRuntime(1549): java.lang.NullPointerException
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.mexican.recipes.RecipeList.onBackPressed(RecipeList.java:139)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.app.Activity.onKeyUp(Activity.java:1898)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.KeyEvent.dispatch(KeyEvent.java:1280)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.app.Activity.dispatchKeyEvent(Activity.java:2078)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1663)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1687)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1120)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.app.Activity.dispatchKeyEvent(Activity.java:2073)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1663)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.widget.TabHost.dispatchKeyEvent(TabHost.java:278)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:789)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1687)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1120)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.app.Activity.dispatchKeyEvent(Activity.java:2073)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1663)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2560)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2535)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.view.ViewRoot.handleMessage(ViewRoot.java:1867)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.os.Looper.loop(Looper.java:123)
10-01 11:45:39.795: E/AndroidRuntime(1549): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-01 11:45:39.795: E/AndroidRuntime(1549): at java.lang.reflect.Method.invokeNative(Native Method)
10-01 11:45:39.795: E/AndroidRuntime(1549): at java.lang.reflect.Method.invoke(Method.java:507)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-01 11:45:39.795: E/AndroidRuntime(1549): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-01 11:45:39.795: E/AndroidRuntime(1549): at dalvik.system.NativeStart.main(Native Method)
編集:RecipeList.javaのコード全体は次のとおりです。
public class RecipeList extends ListActivity{
Typeface font;
Typeface bold;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recipelist);
font = Typeface.createFromAsset(RecipeList.this.getAssets(), "Book Antiqua.ttf");
TextView recipe = (TextView) findViewById(R.id.textViewrecipe);
recipe.setTypeface(font, Typeface.BOLD);
setListAdapter(new MyAdapter(RecipeList.this, android.R.layout.simple_list_item_1,R.id.textViewCategory,getResources().getStringArray(R.array.categories)));
this.getListView().setCacheColorHint(0);
}
private class MyAdapter extends ArrayAdapter<String> {
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] strings) {
super(context, resource, textViewResourceId, strings);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.recipelistrow, parent, false);
String [] items = getResources().getStringArray(R.array.categories);
ImageView iv = (ImageView) row.findViewById(R.id.imageViewRecipe);
TextView tvCategory = (TextView) row.findViewById(R.id.textViewCategory);
TextView tvCategoryDesc = (TextView) row.findViewById(R.id.textViewcategorydesc);
tvCategory.setTypeface(font, Typeface.BOLD);
tvCategory.setText(items[position]);
if(items[position].equals("Burritos")){
iv.setImageResource(R.drawable.ic_list_burritos);
tvCategoryDesc.setText("Burritos, with tasty combination of beef and beans, make it an enticing dish for your family and friends");
}if(items[position].equals("Tacos")){
iv.setImageResource(R.drawable.ic_list_tacos);
tvCategoryDesc.setText("Taco counts a favorite for its versatility and variety. It's perfect for meat lovers and veggie lovers too!");
}if(items[position].equals("Enchiladas")){
iv.setImageResource(R.drawable.ic_list_enchiladas);
tvCategoryDesc.setText("Enchilada makes the perfect match for your favorite salsa. Make it a bit spicy. It's awesome!");
}if(items[position].equals("Fajitas")){
iv.setImageResource(R.drawable.ic_list_fajitas);
tvCategoryDesc.setText("Fajita is well-loved for its exquisite and delightful filling. It's a choice of either beef or boneless chicken.");
}if(items[position].equals("Quesadillas")){
iv.setImageResource(R.drawable.ic_list_quesadillas);
tvCategoryDesc.setText("Quesadillas are filled with oozing goodness and mouthwatering flavors that you will find it hard to resist.");
}if(items[position].equals("Salads")){
iv.setImageResource(R.drawable.ic_list_salads);
tvCategoryDesc.setText("Eat healthy and feel healthy with your protein-rich salads. Cut-off your carbs with this Mexican dish.");
}if(items[position].equals("Chilis")){
iv.setImageResource(R.drawable.ic_list_chili);
tvCategoryDesc.setText("Make an extraordinary appetizer out of your chili con carne and enjoy its tempting flavors.");
}if(items[position].equals("Other Delicacies")){
iv.setImageResource(R.drawable.ic_list_otherdelicacies);
tvCategoryDesc.setText("Learn more about the Mexican recipes that are sinfully good!");
}
return row;
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, SubRecipeList.class);
i.putExtra("id", id);
View view = TabGroupActivity.group.getLocalActivityManager()
.startActivity("show_city", i
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
.getDecorView();
TabGroupActivity.group.replaceView(view);
}
public void grocerylist (View v){
Intent intent = new Intent(RecipeList.this, GroceryList.class);
startActivity(intent);
}
public void recipe (View v){
Intent i = new Intent(RecipeList.this, RecipeList.class);
startActivity(i);
}
public void more (View v){
Intent i = new Intent(RecipeList.this, MoreApps.class);
startActivity(i);
}
@Override
public void onBackPressed() {
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.grocerylistdelete, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getParent());
builder.setView(view);
Button yes = (Button) view.findViewById(R.id.buttonYes);
yes.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
});
Button no = (Button) view.findViewById(R.id.buttonNo);
no.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), RecipeList.class);
finish();
startActivity(i);
}
});
AlertDialog alert = builder.create();
alert.show();
}
}