当从标题栏中的按钮单击时,Android应用程序自定义对话框不工作

问题描述:

在我的应用程序中,标题栏上有3个按钮,其余两个正常工作,第三个应该会生成一个对话框。但是,如果在这一行失败,dialogabt.setContentView(R.layout.custom);当从标题栏中的按钮单击时,Android应用程序自定义对话框不工作

[标题栏的截图] [1]

下面是相关的代码(请让我知道我是否应该发布更多的代码)

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) {  
    int id = item.getItemId(); 

    if (id == R.id.action_inc) { 
     incsize(rl); 
     return true; 
    } else if (id == R.id.action_dec) { 
     decsize(rl); 
     return true; 
    } else if (id == R.id.action_abt) { 
    dialogabt = new Dialog(ActivityName.this); 
      dialogabt.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialogabt.setContentView(R.layout.custom); 
      dialogabt.show(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

R.menu.main

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
android:id="@+id/action_dec" 
android:icon="@drawable/search_minus" 
android:title="dec" 
app:showAsAction="ifRoom"/> 
<item 
android:id="@+id/action_inc" 
android:icon="@drawable/search_plusn" 
android:title="inc" 
app:showAsAction="ifRoom"/> 
<item 
android:id="@+id/action_abt" 
android:icon="@drawable/info" 
android:title="info" 
app:showAsAction="ifRoom"/> 
</menu> 

这里是错误日志 -

FATAL EXCEPTION: main 
android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> 
at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
at android.app.Dialog.setContentView(Dialog.java:471) 
at dhritiapps.tulsiramayan.ActivityName.onOptionsItemSelected(ActivityName.java:423) 
at android.app.Activity.onMenuItemSelected(Activity.java:2548) 
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:412) 
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:188) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69) 
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:202) 
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:761) 
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810) 
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947) 
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618) 
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:153) 
at android.view.View.performClick(View.java:4204) 
at android.view.View$PerformClick.run(View.java:17355) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
at android.app.Dialog.setContentView(Dialog.java:471) 
at dhritiapps.tulsiramayan.ActivityName.onOptionsItemSelected(ActivityName.java:423) 
at android.app.Activity.onMenuItemSelected(Activity.java:2548) 
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:412) 
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:188) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69) 
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:202) 
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:761) 
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810) 
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947) 
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618) 
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:153) 
at android.view.View.performClick(View.java:4204) 
at android.view.View$PerformClick.run(View.java:17355) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f020056 a=-1 r=0x7f020056} 
at android.content.res.Resources.loadDrawable(Resources.java:1927) 
at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
at android.view.View.<init>(View.java:3330) 
at android.view.View.<init>(View.java:3259) 
at android.view.ViewGroup.<init>(ViewGroup.java:425) 
at android.widget.RelativeLayout.<init>(RelativeLayout.java:210) 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
at android.app.Dialog.setContentView(Dialog.java:471) 
at dhritiapps.tulsiramayan.ActivityName.onOptionsItemSelected(ActivityName.java:423) 
at android.app.Activity.onMenuItemSelected(Activity.java:2548) 
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:412) 
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:188) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:69) 
at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:202) 
at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:761) 
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810) 
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957) 
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947) 
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618) 
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:153) 
at android.view.View.performClick(View.java:4204) 
at android.view.View$PerformClick.run(View.java:17355) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 

这里是custom.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="315dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:background="@drawable/custom_alert2" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tv_header" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="About this App" 
     android:textColor="#FFFFFF" 
     android:textSize="20dp" 
     android:textStyle="bold" 
     android:padding="10dp" 
     /> 
</RelativeLayout> 

及以下custom_alert2.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    <solid android:color="#235685" /> 
    <stroke 
     android:width="3dp" 
     android:color="#FFFFFF" /> 
    <corners 
     android:radius="8dp" 
     android:color="#FFFFFF" /> 
    <padding 
     android:bottom="5dp" 
     android:left="5dp" 
     android:right="5dp" 
     android:top="5dp" /> 
</shape> 
+0

发布您的custom.xml布局 –

+0

发布您的custom.xml布局 – Naitik

+0

你们是对的,问题是在custom.xml中,我已经添加了这个文件。进一步的分析发现,如果我使用相同的custom.xml没有背景,它的工作正常。但是,一旦我添加了背景,则会发生此问题。任何想法,如何解决它。我需要custom.xml的背景。 –

你需要创建一个扩展对话并实现onClickListener类。

下面是一个示例代码。

public class CustomDialogClass extends Dialog implements 
    android.view.View.OnClickListener { 

    public Activity c; 
    public Dialog d; 
    public Button yes, no; 

    public CustomDialogClass(Activity a) { 
    super(a); 
    // TODO Auto-generated constructor stub 
    this.c = a; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.custom_dialog); 
    yes = (Button) findViewById(R.id.btn_yes); 
    no = (Button) findViewById(R.id.btn_no); 
    yes.setOnClickListener(this); 
    no.setOnClickListener(this); 
    } 
    @Override 
    public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btn_yes: 
     c.finish(); 
     break; 
    case R.id.btn_no: 
     dismiss(); 
     break; 
    default: 
     break; 
    } 
    dismiss(); 
    } 
} 

如何调用对话框?

@Override 
public boolean onOptionsItemSelected(MenuItem item) {  
    int id = item.getItemId(); 

    if (id == R.id.action_inc) { 
     incsize(rl); 
     return true; 
    } else if (id == R.id.action_dec) { 
     decsize(rl); 
     return true; 
    } else if (id == R.id.action_abt) { 
      CustomDialogClass dlg = new CustomDialogClass(Balkand.this); 
      dlg.show(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

如果这不起作用,我需要检查自定义对话框的xml。 你可以在这里发表吗?

+0

这不起作用。现在来自同一行的新类同样的错误。 –

+0

添加了custom.xml。一个更新是,当我从它删除背景(android:background =“@ drawable/custom_alert2”)后使用此custom.xml时,一切正常。请分析和帮助。 –

+0

任何人都请帮助,我已经尝试了一切,但无法将背景设置为我的自定义对话框。 –