下午好,
我之前用其他适配器(如 SimpleAdapter)问过这个问题,但简单适配器的解决方案不适用于 ArrayAdapter。在 SimpleAdapter 中,我得到了屏幕宽度和高度,然后将其传递给了数据行的 RelativeLayout。效果是一次只显示一个填满整个屏幕的记录。静态数据很好,但现在我想使用可变数据。简而言之,我真的不想传递高度和宽度。我的 xml 布局使用 dip 所以屏幕尺寸可以随心所欲地改变。我真正追求的是一种方法来控制一次只对一条记录的 getView 调用。
无论如何,使用 SimpleAdapter 的解决方法,我认为像以前一样传递高度和宽度会起作用,但由于某种原因,这次我遇到了一个我无法弄清楚的错误。这是设置宽度和高度的代码:
RelativeLayout.LayoutParams szParms = new RelativeLayout.LayoutParams(mWidth, mHeight);
vw_BigRow.setLayoutParams(szParms);
高度和宽度在其他地方确定,并且在我测试过的所有设备上都是准确的。不太确定还要发布什么,所以只要告诉我,我就会将该代码/信息添加到问题中。
E/AndroidRuntime(404): FATAL EXCEPTION: main
E/AndroidRuntime(404): java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams
编辑: 正如已经正确指出的那样,我的错误发生在 CastClassException 但是我仍然没有正确完成分配,因为我继续收到错误。我尝试在活动中使用以下内容设置高度/宽度:
AbsListView.LayoutParams szParms = new AbsListView.LayoutParams(mWidth, mHeight);
lstvw_LiftData.setLayoutParams(szParms);
E/AndroidRuntime(1886): FATAL EXCEPTION: main
E/AndroidRuntime(1886): java.lang.ClassCastException: android.widget.AbsListView$LayoutParams
和
ListView.LayoutParams szParms = new ListView.LayoutParams(mWidth, mHeight);
lstvw_LiftData.setLayoutParams(szParms);
E/AndroidRuntime(1886): FATAL EXCEPTION: main
E/AndroidRuntime(1886): java.lang.ClassCastException: android.widget.AbsListView$LayoutParams
lstvw_LiftData 是一个有效的参考而不是空值。
在 ArrayAdapter 的 getView() 覆盖内,我还尝试设置具有相同结果的值 @Override public View getView(int position, View convertView, ViewGroup parent) {...}
我唯一能做的就是这个,然后是一对,不是全部,但我的一些元素忽略了它们的布局定位并直接到底部。
View vw_BigRow = convertView;
if (vw_BigRow == null)
{
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vw_BigRow = inflater.inflate(R.layout.liftdatalayout, null);
}
vw_BigRow.setMinimumHeight(mHeight);
vw_BigRow.setMinimumWidth(mWidth);