Android adapterview和addview出现问题

Android adapterview和addview出现问题,android,android-arrayadapter,Android,Android Arrayadapter,所以我正在尝试构建一个android应用程序,它从用户输入中获取代码,并将其放入listview的自定义布局中 下面是我为列表中每个元素提供的布局的xml(以下称为game_row.xml) 有谁能帮我弄清楚如何让我的视图彼此配合良好吗?您使用的LayoutInflater不正确。在下面的代码块中 View dialoglayout = inflater.inflate(R.layout.settings_layout, (ViewGroup) getCurrentFocus()); …充气机

所以我正在尝试构建一个android应用程序,它从用户输入中获取代码,并将其放入listview的自定义布局中

下面是我为列表中每个元素提供的布局的xml(以下称为game_row.xml)


有谁能帮我弄清楚如何让我的视图彼此配合良好吗?

您使用的
LayoutInflater
不正确。在下面的代码块中

View dialoglayout = inflater.inflate(R.layout.settings_layout, (ViewGroup) getCurrentFocus());
…充气机试图做两件事:

  • 使用提供的视图组膨胀XML布局,以确定根布局参数
  • 将充气布局附着到提供的视图组
  • 您不希望发生第二件事,因为您正在将视图交给AlertDialog,而不是将其附加到“当前焦点”(显然是崩溃日志中的ListView)。您也不希望第一件事情像编写的那样发生,因为“当前焦点”不是这个膨胀视图的父视图,所以使用它来计算layoutparms也是毫无意义的

    通常,您应该始终将要附加的直接父视图作为
    inflate()
    的第二个参数传递给,如果您不想在此时附加这两个参数,则使用第三个参数。但是,在本例中,您无法访问实际的父视图(位于正在生成的AlertDialog中),并且它将覆盖任何
    LayoutParams
    ,因此您应该修改代码,使其在膨胀时不通过父视图:

    View dialoglayout = inflater.inflate(R.layout.settings_layout, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(dialoglayout);
    
    旁注:

    同样,这只适用于这个特殊情况。在几乎所有其他情况下,您都应该像这样使用
    充气()

    充气机。充气(R.layout.settings\u布局,父级,false)


    进入充气布局的真实父视图。

    您试图充气的
    视图
    不受
    AdapterView
    支持。您是否尝试过使用不同类型的
    视图
    ?@Pheonixblade9有趣。。。我尝试将视图更改为adapterview,但它在启动时崩溃了,支持哪种类型的视图?谢谢你的帮助!有趣的。。。所以我只是想确定我明白发生了什么。。。因为这是一个警报对话框,它会以对listview有害的方式更改layoutparams。因此,我们不给它父视图,因为我们希望它有自己的单独布局参数?您正在膨胀一个新布局以附加到
    AlertDialog
    。应用程序中的任何
    ListView
    都与讨论无关,因此在这段代码中根本不应该考虑它。我要说的另一点是,在正常情况下,您应该将父视图传递给
    充气()
    ,但在对话框中,您没有传递的正确视图。
    05-10 14:27:56.153: E/AndroidRuntime(1569): FATAL EXCEPTION: main
    05-10 14:27:56.153: E/AndroidRuntime(1569): java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.widget.AdapterView.addView(AdapterView.java:477)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.view.LayoutInflater.inflate(LayoutInflater.java:497)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at edu.ucsb.cs.cs185.hw4skeleton.KeepScoreHomeScreen.buildSettings(KeepScoreHomeScreen.java:145)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at edu.ucsb.cs.cs185.hw4skeleton.KeepScoreHomeScreen.onOptionsItemSelected(KeepScoreHomeScreen.java:91)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.app.Activity.onMenuItemSelected(Activity.java:2534)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:958)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:514)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:99)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.view.View.performClick(View.java:4084)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.view.View$PerformClick.run(View.java:16966)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.os.Handler.handleCallback(Handler.java:615)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.os.Handler.dispatchMessage(Handler.java:92)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.os.Looper.loop(Looper.java:137)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at android.app.ActivityThread.main(ActivityThread.java:4745)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at java.lang.reflect.Method.invokeNative(Native Method)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at java.lang.reflect.Method.invoke(Method.java:511)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    05-10 14:27:56.153: E/AndroidRuntime(1569):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    
    View dialoglayout = inflater.inflate(R.layout.settings_layout, (ViewGroup) getCurrentFocus());
    
    View dialoglayout = inflater.inflate(R.layout.settings_layout, null);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(dialoglayout);