为什么我的ListView中的自定义不显示所有的部件? [英] Why is my custom ListView not showing all the widgets?
本文介绍了为什么我的ListView中的自定义不显示所有的部件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我写一个自定义的列表视图的约会应用程序。在ListView由一个
- 查看,其颜色表示优先
- 复选框,与选择项目。
- DateText,显示什么迄今为止任命为
- MonthText,展现任命是何年何月
- TimeText,展现在委任
- 标题,用于存储预约 摘要
在ListView中的每一行应该是这个样子:
但是,只有两个小部件是可见的:DateText和MonthText。其余的都没有。为什么会出现这种情况?
我的 XML
和 getView()
方法如下:
<?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=http://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()); 查看priorityIndicator =(查看)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:
priorityIndicator.setBackgroundColor(Color.BLUE);
打破; 案例PRIORITY_NORMAL:
priorityIndicator.setBackgroundColor(Color.GREEN);
打破; 案例PRIORITY_HIGH:
priorityIndicator.setBackgroundColor(Color.RED);
打破; 默认:
priorityIndicator.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屋!
查看全文