为什么我的ListView中的自定义不显示所有的部件? [英] Why is my custom ListView not showing all the widgets?

查看:127
本文介绍了为什么我的ListView中的自定义不显示所有的部件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写一个自定义的列表视图的约会应用程序。在ListView由一个


  • 查看,其颜色表示优先

  • 复选框,与选择项目。

  • DateText,显示什么迄今为止任命为

  • MonthText,展现任命是何年何月

  • TimeText,展现在委任

  • 标题,用于存储预约
  • 摘要

在ListView中的每一行应该是这个样子:

但是,只有两个小部件是可见的:DateText和MonthText。其余的都没有。为什么会出现这种情况?

我的 XML getView()方法如下:

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =WRAP_CONTENT>    <查看
        机器人:ID =@ + ID / priorityView
        机器人:layout_width =20dip
        机器人:layout_height =WRAP_CONTENT
        机器人:背景=#CCCCCC
        机器人:layout_alignParentLeft =真/>    <复选框
        机器人:ID =@ + ID / selectedCheckbox
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignBottom =@ ID / priorityView
        机器人:layout_alignTop =@ ID / priorityView
        机器人:layout_toRightOf =@ ID / priorityView
        机器人:比重=中心>
    < /复选框>    <的TextView
        机器人:ID =@ + ID / dateText
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignTop =@ ID / priorityView
        机器人:layout_toRightOf =@ ID / selectedCheckbox
        机器人:比重=中心
        机器人:paddingBottom会=2DIP
        机器人:paddingLeft =5dip
        机器人:paddingRight =5dip
        机器人:paddingTop =2DIP
        机器人:文字=@字符串/空
        机器人:TEXTSIZE =20dip
        机器人:文字样式=大胆/>    <的TextView
        机器人:ID =@ + ID / monthText
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignBottom =@ ID / monthText
        机器人:layout_alignLeft =@ ID / dateText
        机器人:layout_alignRight =@ ID / dateText
        机器人:layout_below =@ ID / dateText
        机器人:比重=中心
        机器人:填充=5dip
        机器人:文字=@字符串/空
        机器人:TEXTSIZE =10dip>
    < / TextView的>    <的TextView
        机器人:ID =@ + ID / timeText
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignBottom =@ ID / priorityView
        机器人:layout_alignTop =@ ID / priorityView
        机器人:layout_toRightOf =@ ID / dateText
        机器人:比重=中心
        机器人:填充=5dip
        机器人:文字=@字符串/空>
    < / TextView的>    <的TextView
        机器人:ID =@ + ID / titleText
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignBottom =@ ID / priorityView
        机器人:layout_alignParentRight =真
        机器人:layout_alignTop =@ ID / priorityView
        机器人:layout_toRightOf =@ ID / timeText
        机器人:比重=中心
        机器人:填充=5dip
        机器人:文字=@字符串/空>
    < / TextView的>< / RelativeLayout的>

getView()

 公共查看getView(INT位置,查看convertView,父母的ViewGroup){                    //即熄灭屏幕列表视图被回收。                    查看recycledView = convertView;                    如果(recycledView == NULL){
                        / *
                         *如果没有以回收(例如,当列表视图是
                         *首先创建),我们必须从XML文件膨胀的观点
                         *使用吹气布局。
                         * /                        LayoutInflater吹气=(LayoutInflater)上下文
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);                        recycledView = inflater.inflate(R.layout.row,NULL);
                    }                    / *
                     *我们现在有一个观点的工作。现在,我们将填写内容
                     *此列表视图项目。
                     * /                    预约电流= items.get(位置);
                    如果(电流!= NULL){                        Log.e(垃圾,current.toString());                        查看priorityIndi​​cator =(查看)recycledView.findViewById(R.id.priorityView);
                        复选框selectedCheckbox =(复选框)recycledView.findViewById(R.id.selectedCheckbox);
                        TextView的dateText =(TextView中)recycledView.findViewById(R.id.dateText);
                        TextView的monthText =(TextView中)recycledView.findViewById(R.id.monthText);
                        TextView的timeText =(TextView中)recycledView.findViewById(R.id.timeText);
                        TextView的titleText =(TextView中)recycledView.findViewById(R.id.titleText);                        //设置优先级指示器,以适当的色彩。
                        selectedCheckbox.setChecked(真);                        开关(current.getPriority()){
                        案例PRIORITY_LOW:
                            priorityIndi​​cator.setBackgroundColor(Color.BLUE);
                            打破;                        案例PRIORITY_NORMAL:
                            priorityIndi​​cator.setBackgroundColor(Color.GREEN);
                            打破;                        案例PRIORITY_HIGH:
                            priorityIndi​​cator.setBackgroundColor(Color.RED);
                            打破;                        默认:
                            priorityIndi​​cator.setBackgroundColor(Color.GRAY);
                            打破;
                        }                        //独自离开选中的复选框。                        //设置dateText显示约会的日期
                        dateText.setText(29);
                        monthText.setText(SEP);
                        timeText.setText(11:00);
                        titleText.setText(current.getTitle());
                    }                    返回recycledView;
                }


解决方案

尝试使用线性布局重力属性,而不是相对的布局。相对布局是不理想的在ListView膨胀。

I am writing an appointments application with a customised Listview. The ListView consists of a

  • View, whose colour indicates priority
  • Checkbox, to select the item with.
  • DateText, to show what date the appointment is
  • MonthText, to show what month the appointment is
  • TimeText, to show when the appointment is
  • Title, which stores the summary of the appointment

Each row in the listView should look something like this:

But only two widgets are visible: DateText and MonthText. The rest are not. Why is this the case?

My XML and getView() method are below:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <View
        android:id="@+id/priorityView"
        android:layout_width="20dip"
        android:layout_height="wrap_content"
        android:background="#cccccc"
        android:layout_alignParentLeft="true" />

    <CheckBox
        android:id="@+id/selectedCheckbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/priorityView"
        android:layout_alignTop="@id/priorityView"
        android:layout_toRightOf="@id/priorityView"
        android:gravity="center">
    </CheckBox>

    <TextView
        android:id="@+id/dateText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@id/priorityView"
        android:layout_toRightOf="@id/selectedCheckbox"
        android:gravity="center"
        android:paddingBottom="2dip"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        android:paddingTop="2dip"
        android:text="@string/empty"
        android:textSize="20dip"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/monthText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/monthText"
        android:layout_alignLeft="@id/dateText"
        android:layout_alignRight="@id/dateText"
        android:layout_below="@id/dateText"
        android:gravity="center"
        android:padding="5dip"
        android:text="@string/empty"
        android:textSize="10dip" >
    </TextView>

    <TextView
        android:id="@+id/timeText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/priorityView"
        android:layout_alignTop="@id/priorityView"
        android:layout_toRightOf="@id/dateText"
        android:gravity="center"
        android:padding="5dip"
        android:text="@string/empty" >
    </TextView>

    <TextView
        android:id="@+id/titleText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/priorityView"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@id/priorityView"
        android:layout_toRightOf="@id/timeText"
        android:gravity="center"
        android:padding="5dip"
        android:text="@string/empty" >
    </TextView>

</RelativeLayout>

getView()

public View getView(int position, View convertView, ViewGroup parent) {

                    // List views that go off the screen are recycled.

                    View recycledView = convertView;

                    if (recycledView == null) {
                        /*
                         * If there is no view to recycle (e.g. when the listview is
                         * first created) we must inflate the view from the xml file
                         * using Layout Inflater.
                         */

                        LayoutInflater inflater = (LayoutInflater) context
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                        recycledView = inflater.inflate(R.layout.row, null);
                    }

                    /*
                     * We now have a view to work with. We will now fill in the contents
                     * of this list view item.
                     */

                    Appointment current = items.get(position);
                    if (current != null) {

                        Log.e("crap",current.toString());

                        View priorityIndicator = (View) recycledView.findViewById(R.id.priorityView);
                        CheckBox selectedCheckbox = (CheckBox) recycledView.findViewById(R.id.selectedCheckbox);
                        TextView dateText = (TextView) recycledView.findViewById(R.id.dateText);
                        TextView monthText = (TextView) recycledView.findViewById(R.id.monthText);
                        TextView timeText = (TextView) recycledView.findViewById(R.id.timeText);
                        TextView titleText = (TextView) recycledView.findViewById(R.id.titleText);

                        //Set priority indictor to appropriate colour.
                        selectedCheckbox.setChecked(true);

                        switch (current.getPriority()) {
                        case PRIORITY_LOW:
                            priorityIndicator.setBackgroundColor(Color.BLUE);
                            break;

                        case PRIORITY_NORMAL:
                            priorityIndicator.setBackgroundColor(Color.GREEN);
                            break;

                        case PRIORITY_HIGH:
                            priorityIndicator.setBackgroundColor(Color.RED);
                            break;

                        default:
                            priorityIndicator.setBackgroundColor(Color.GRAY);
                            break;
                        }

                        //Leave the selected checkbox alone.

                        //Set dateText to show the date of the appointment
                        dateText.setText("29");
                        monthText.setText("SEP");
                        timeText.setText("11:00");
                        titleText.setText(current.getTitle());
                    }

                    return recycledView;
                }

解决方案

Try using Linear Layout with gravity attribute instead of relative layout. Relative layout is not ideal for inflating in a listview.

这篇关于为什么我的ListView中的自定义不显示所有的部件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆