gpt4 book ai didi

android - 使用自定义警报对话框 onbackpressed 时出错

转载 作者:行者123 更新时间:2023-11-30 03:59:59 27 4
gpt4 key购买 nike

我想退出我的应用程序,首先显示一个自定义的警告对话框,询问用户是否确定要退出。我在下面的代码中遇到错误。顺便说一下,我使用 getparent() 因为 Activity 在 Activity 组中:

    @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();


}

}

最佳答案

替换这一行

AlertDialog.Builder builder = new AlertDialog.Builder(getParent());

AlertDialog.Builder builder = new AlertDialog.Builder(yourActivityName.this);

以这种方式使用对话框很难知道问题..

public void showDialog() {

final Dialog dialog = new Dialog(yourActivityName.this);
dialog.setContentView(R.layout.grocerylistdelete);
dialog.setTitle("Save the changes?");

dialog.show();
Button yes = (Button) dialog.findViewById(R.id.buttonYes);
yes.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//Do youur work
}
});
Button no = (Button) dialog.findViewById(R.id.buttonNo);
no.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
//Do your work
}
});

}

关于android - 使用自定义警报对话框 onbackpressed 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12667262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com