gpt4 book ai didi

android - ArrayAdapter 只显示一条记录

转载 作者:行者123 更新时间:2023-11-30 04:11:25 28 4
gpt4 key购买 nike

我之前曾用其他适配器(如 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 上,但是我仍然没有正确地进行分配,因为我继续收到错误。我在 Activity 中尝试使用以下设置高度/宽度:

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 是一个有效的引用而不是 null。

在 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);

最佳答案

1.如果您希望一次只调用一条记录,只需控制您实现的适配器的 getCount 返回 1。

2.java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams 异常是因为要添加到listview的 View 应该使用AbsListView.LayoutParams而不是其他 LayoutParams,例如 RelativeLayout$LayoutParams

编辑:

看下面的getView代码,是google推荐的。

/**
* Make a view to hold each row.
*
* @see android.widget.ListAdapter#getView(int, android.view.View,
* android.view.ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
// A ViewHolder keeps references to children views to avoid unneccessary calls
// to findViewById() on each row.
ViewHolder holder;

// When convertView is not null, we can reuse it directly, there is no need
// to reinflate it. We only inflate a new View when the convertView supplied
// by ListView is null.
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text, null);

// Creates a ViewHolder and store references to the two children views
// we want to bind data to.
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);

convertView.setTag(holder);
} else {
// Get the ViewHolder back to get fast access to the TextView
// and the ImageView.
holder = (ViewHolder) convertView.getTag();
}

// Bind the data efficiently with the holder.
holder.text.setText(DATA[position]);
holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);

return convertView;
}

static class ViewHolder {
TextView text;
ImageView icon;
}

关于android - ArrayAdapter 只显示一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10808003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com