Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >带有自定义ListView的Android对话框

带有自定义ListView的Android对话框
EN

Stack Overflow用户
提问于 2015-09-29 03:58:21
回答 3查看 182关注 0票数 1

我正在尝试制作一个带有自定义列表视图的对话框。但是我得到了一个错误:“指定的子已经有了一个父级。您必须首先调用孩子的父级上的removeView()”。

ActivityCode:

代码语言:javascript
运行
AI代码解释
复制
public class ConfigActivity extends ActionBarActivity {

    //... onCreate and blablabla

    public void onClickUsoDados(View view) {
        final ArrayList<CustomItem> data = init();//init() just get some data

        CustomListAdapter adapter = new CustomListAdapter(this, data);

        View v = ConfigActivity.this.getLayoutInflater().inflate(R.layout.layout_config_userdata_listview, null, true);

        list = (ListView) v.findViewById(R.id.listView1);
        list.setAdapter(adapter);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                String Slecteditem = data.get(position).nome;
                Toast.makeText(ConfigActivity.this, Slecteditem, Toast.LENGTH_SHORT).show();

            }
        });

        final Dialog dialogOut = new Dialog(ConfigActivity.this);

        dialogOut.setContentView(list);
        dialogOut.setCancelable(true);
        dialogOut.setTitle("Dados");
        dialogOut.buNeutralButton("Voltar",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialogOut.dismiss();
                    }
                });

        dialogOut.show();
    }
}   

CustomItem.java

代码语言:javascript
运行
AI代码解释
复制
public class CustomItem {
    public String usuario;
    public String nome;
    public String curso;
}

CustomListAdapter.java

代码语言:javascript
运行
AI代码解释
复制
public class CustomListAdapter extends ArrayAdapter<CustomItem> {

    private Activity context;
    private ArrayList<CustomItem> data;

    public CustomListAdapter(Activity context, ArrayList<CustomItem> item) {
        super(context, R.layout.layout_config_userdata_row, item);

        this.context = context;
        this.data = item;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        CustomItem user = getItem(position);

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.layout_config_userdata_row, parent, true);
        }

        TextView uUsername = (TextView) convertView.findViewById(R.id.textViewListViewUsuario);
        TextView uName = (TextView) convertView.findViewById(R.id.textViewListViewNome);
        TextView uCurso = (TextView) convertView.findViewById(R.id.textViewListViewCurso);

        uUsername.setText(user.usuario);
        uName.setText(user.nome);
        uCurso.setText(user.curso);
        return convertView;

    }
}

我在"dialogOut.show();",上得到了这个错误,或者,如果我使用构建器,我会在"dialog.create()".上得到这个错误有什么想法?

EDIT1: xml文件。

layout_config_userdata_row.xml

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout //stuff>

    <LinearLayout <!--stuff-->>
        <LinearLayout <!--stuff-->>
            <LinearLayout <!--stuff-->>
                <TextView <!--stuff-->/>
                <TextView
                    android:id="@+id/textViewListViewUsuario"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="userToLogin"
                    android:textAppearance="?android:attr/textAppearanceMedium" />
            </LinearLayout>
        </LinearLayout>

        <LinearLayout <!--stuff-->>
            <LinearLayout <!--stuff-->>
                <TextView <!--stuff-->/>
                <TextView
                    android:id="@+id/textViewListViewNome"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="nomeUser"
                    android:textAppearance="?android:attr/textAppearanceMedium" />
            </LinearLayout>
        </LinearLayout>

        <LinearLayout <!--stuff-->>
            <LinearLayout <!--stuff-->>
                <TextView <!--stuff-->/>
                <TextView
                    android:id="@+id/textViewListViewCurso"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="cursoNome"
                    android:textAppearance="?android:attr/textAppearanceMedium" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

    <FrameLayout <!--stuff-->>
        <ImageView <!--stuff-->/>
    </FrameLayout>
</LinearLayout>

和layout_config_userdata_listview.xml

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

EDIT2:堆栈跟踪。

代码语言:javascript
运行
AI代码解释
复制
09-29 12:50:24.073  19813-19813/com.ztesteconfig E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3680)
            at android.view.View.performClick(View.java:4191)
            at android.view.View$PerformClick.run(View.java:17229)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4960)
            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:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at android.view.View$1.onClick(View.java:3675)
            at android.view.View.performClick(View.java:4191)
            at android.view.View$PerformClick.run(View.java:17229)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4960)
            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:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
            at android.view.ViewGroup.addViewInner(ViewGroup.java:3439)
            at android.view.ViewGroup.addView(ViewGroup.java:3310)
            at android.view.ViewGroup.addView(ViewGroup.java:3286)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:337)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:327)
            at android.app.Dialog.setContentView(Dialog.java:480)
            at com.ztesteconfig.ConfigActivity.onClickUsoDados(ConfigActivity.java:334)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at android.view.View$1.onClick(View.java:3675)
            at android.view.View.performClick(View.java:4191)
            at android.view.View$PerformClick.run(View.java:17229)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4960)
            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:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)

在com.ztesteconfig.ConfigActivity.onClickUsoDados(ConfigActivity.java:334),它正是"dialogOut.show();“

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-29 09:22:21

好的,让我们回顾一下:

  • 您的错误消息是“指定的视图已经具有父视图”。
  • 您的布局有一个不使用的LinearLayout
  • 您的Java代码特别忽略了这个LinearLayout

因此,从布局资源中删除LinearLayout。你不是在用它。你不需要它。而且,它是错误的来源,因为ListView不能同时位于LinearLayout和对话框的content视图中。

或者,如果您有一个长期的愿景,您将需要该LinearLayout,将LinearLayout作为对话框的内容视图,而不是LinearLayout中的ListView

票数 1
EN

Stack Overflow用户

发布于 2015-09-29 04:08:29

尝尝这个

代码语言:javascript
运行
AI代码解释
复制
if(view.getParent()!=null)
((ViewGroup)view.getParent()).removeView(v);
票数 0
EN

Stack Overflow用户

发布于 2015-09-29 09:39:29

尝试以编程方式创建列表视图。

使用

代码语言:javascript
运行
AI代码解释
复制
list = new ListView(getContext());

而不是

代码语言:javascript
运行
AI代码解释
复制
list = (ListView) v.findViewById(R.id.listView1);

将xml编辑为

代码语言:javascript
运行
AI代码解释
复制
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/base_view">
     <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

(向LinearLayout添加了一个id )

在你的活动代码中

代码语言:javascript
运行
AI代码解释
复制
LinearLayout base=v.findViewById(R.id.base_view);

并将此视图设置为对话框的内容。

代码语言:javascript
运行
AI代码解释
复制
dialogOut.setContentView(base);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32843421

复制
相关文章
使用 kubeadm 在 GCP 部署 Kubernetes
最近在准备 CKA 考试,所以需要搭建一个 Kubernetes 集群来方便练习.GCP 平台新用户注册送 300 刀体验金,所以就想到用 kubeadm 在 GCP 弄个练练手,既方便又省钱.
用户2443625
2019/01/02
2.3K0
【MYSQL函数】MYSQL中IF函数在where中的使用
WHERE IF(条件, true执行条件, false执行条件) 业务需求: 查询SUPPLIER_CLASS=0 and tp1.`TYPE_FLAG` = 1 或者 SUPPLIER_CLASS=1 实现有两种:
用户5640963
2019/07/25
12.5K0
腾讯云函数在开发中的实践
腾讯云函数在它的帮助文档里面有已经提到了它的几个具体实践,通过管中窥豹,我也来谈谈在具体业务中的几个实践。
槽痞
2020/09/20
2.8K0
在 Python 中如何使用 format 函数?
在Python中,format()函数是一种强大且灵活的字符串格式化工具。它可以让我们根据需要动态地生成字符串,插入变量值和其他元素。本文将介绍format()函数的基本用法,并提供一些示例代码帮助你更好地理解和使用这个函数。
海拥
2023/07/05
1.3K0
【玩转腾讯云】让NuxtSSR在云函数中飞起来
我们以往部署Nuxt到服务器需要pm2进行进程管理,还需要考虑到服务器的性能,负载均衡、网络安全等一系列运维问题。往往我们做的却不是最优的,那么为什么我们不将它交给专业运维的人去配置呢?
XaDon
2020/04/22
2K0
【玩转腾讯云】让NuxtSSR在云函数中飞起来
在云函数中使用真正serverless的kv数据
上次在云函数里面整了一个嵌入式的SQL数据库以后爽的连云开发数据库都不想用了。不过有的时候还是需要用到kv存储,那能不能也serverless一把呢?level就是一个还不错的选择。打包一个层以后直接引用就可以了:
黄希彤
2022/04/27
1K0
在PHP中strpos函数的正确使用方式
首先简单介绍下 strpos 函数,strpos 函数是查找某个字符在字符串中的位置,这里需要明确这个函数的作用,这个函数得到的是位置。 如果存在,返回数字,否则返回的是 false。 而很多时候我们拿这个函数用来判断字符串中是否存在某个字符,一些同学使用的姿势是这样的 // 判断‘沈唁志博客’中是否存在‘博客’这个词 if (strpos('沈唁志博客', '博客')) { // 如果存在执行此处代码 echo '存在'; }else{ // 如果不存在执行此处代码 e
沈唁
2018/05/24
5.3K0
转换符说明使用方法(在printf函数中)
如%d %c %ld......这些符号叫做转换说明。代表着数据转化成显示的形式。
洁洁
2023/10/10
2700
使用functools.singledispatch在Python中实现函数重载
我们在学习 C 和 C++的时候,会接触到一个概念叫做函数重载。简单来说函数重载指的是多个函数具有相同的名称,但是参数不同(包括参数类型和参数数量)。编译器在遇到重载函数的调用时,会在同名函数的不同重载实现中选择参数匹配的哪一个来调用。
杜逸先
2023/04/13
2.1K0
使用functools.singledispatch在Python中实现函数重载
【玩转腾讯云】使用 serverless 在腾讯云部署第一个函数
serverless 是各大云服务商提供出来的一种无服务的计算资源。为什么叫无服务呢,因为如果你使用 serverless,你只需要关注应用层,而无需关心底层基础设施,无需运维。简而言之,serverless 并不是真的无服务,而是关于有服务的不归你管,云服务商帮你搞定,比如 google,aws 或者 aliyun。
量子态的沐子呓
2020/04/18
1.1K0
【玩转腾讯云】使用 serverless 在腾讯云部署第一个函数
uniCloud云函数 云对象简单使用
云对象简单使用 今天看了下文档 发现多了个 云对象 目前需要下载 3.4.0及以上版本 目前为 alpha版本 个人觉得云对象 让我们更加的能 贴近面向对象 https://www.dcloud.io
代码哈士奇
2022/04/13
1.5K0
uniCloud云函数 云对象简单使用
在模板中使用函数
系统自带的函数,一般在functions.php中 // C函数,获取配置名称 <title>{:C('WEB_SITE_TITLE')}</title> // U函数,获取URL地址 <a class="brand" href="{:U('index/index')}">OneThink</a>
PM吃瓜
2019/08/12
1.2K0
在模板中使用函数
云函数各种使用方式
云函数代理蚁剑流量 1.创建云函数 #!/usr/bin/env # -*- coding:utf-8 -*- import requests import json from urllib.parse import urlsplit def geturl(urlstr): jurlstr = json.dumps(urlstr) dict_url = json.loads(jurlstr) return dict_url['url'] def main_handler(e
R0A1NG
2022/02/19
1.3K0
云函数各种使用方式
在echarts3中使用字符云
echarts2的官方API里是带有字符云的,但到了echarts3就被从官网上移除了,想要使用的话可以从github上下载: 下载地址:https://github.com/ecomfe/echarts-wordcloud 使用方法: 1.依次引入echarts.min.js和echarts-wordcloud.min.js(文件位置:下载的压缩包下dist/echarts-wordcloud.min.js); <script src="echarts.min.js"></script> <script
李文杨
2018/03/14
3.9K0
Jmeter(三十)_TimeShift函数在JSR223中的使用
日期 - 这是日期值。用于如果要通过添加或减去特定天数,小时或分钟来创建特定日期的情况。如果参数值未通过,则使用当前日期。
飞天小子
2018/08/31
3.2K0
Jmeter(三十)_TimeShift函数在JSR223中的使用
使用云函数将CDN的日志存储到COS中
本文介绍如何使用腾讯云的云函数功能,创建两个函数,实现定时将CDN的日志存储到COS中。
rexliao
2019/05/29
5.5K0
使用云函数将CDN的日志存储到COS中
c语言random函数在vc,C++ 中随机函数random函数的使用方法
一、random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。 可改用C++下的rand函数来实现。
全栈程序员站长
2022/09/05
6K0
Deploy TiDB on GCP GKE (Google Cloud)
how to deploy a TiDB cluster on GCP GKE with your laptop (Linux or macOS) for development or testing
杨漆
2021/01/31
8700
Deploy TiDB on GCP GKE (Google Cloud)
TCB系列学习文章——在云函数内使用 Redis 扩展
打开腾讯云控制台,进入到环境详情页面,点击左侧的「拓展管理」,进入到拓展管理详情页,并点击 Redis 拓展,安装拓展。
F颜
2021/04/05
8310
指针在函数中的作用
指针传递地址时,指针变量产生了副本,但副本与原变量所指的内存区域是同一个。对指针副本指向的变量进行改变,就是改变原指针变量所指向的变量。
跋扈洋
2022/04/27
2.9K0
指针在函数中的作用

相似问题

在gcp云函数中使用gorillamux

217

无法在GCP中创建云函数

18

云函数在GCP中的调用

14

无法在GCP中创建云函数

12

GCP -使用python stdout的云函数

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文