gpt4 book ai didi

android - Android 的自定义 ListView 适配器 - 如何在 getView() 中获得正确的 View ?

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:55 28 4
gpt4 key购买 nike

我正在尝试编写一个自定义适配器来将一个简单的类适配到 ListView 中。该类用于 SMS 消息,它包含简单的字段,如正文、发件人地址等。下面是我的适配器布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
android:id="@+id/imgContactPhoto"
android:contentDescription="Contact photo"
android:layout_width="90sp"
android:layout_height="90sp" />

<TextView
android:id="@+id/lblMsg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/imgContactPhoto"
android:paddingLeft="10sp" />

</RelativeLayout>

还有我的自定义适配器类:

public class SmsListAdapter extends ArrayAdapter{

private int resource;
private LayoutInflater inflater;
private Context context;

@SuppressWarnings("unchecked")
public SmsListAdapter(Context ctx, int resourceId, List objects) {
super(ctx, resourceId, objects);
resource = resourceId;
inflater = LayoutInflater.from( ctx );
context=ctx;
}

@Override
public View getView (int position, View convertView, ViewGroup parent) {
//create a new view of the layout and inflate it in the row
convertView = ( RelativeLayout ) inflater.inflate( resource, null );

// Extract the object to show
Sms msg = (Sms) getItem(position);

// Take the TextView from layout and set the message
TextView lblMsg = (TextView) convertView.findViewById(R.id.lblMsg);
lblMsg.setText(msg.getBody());

//Take the ImageView from layout and set the contact image
long contactId = fetchContactId(msg.getSenderNum());
String uriContactImg = getPhotoUri(contactId).toString();
ImageView imgContactPhoto = (ImageView) convertView.findViewById(R.id.imgContactPhoto);
int imageResource = context.getResources().getIdentifier(uriContactImg, null, context.getPackageName());
Drawable image = context.getResources().getDrawable(imageResource);
imgContactPhoto.setImageDrawable(image);
return convertView;
}
}

当我尝试激活适配器时,我在 getView() 的第一行收到一条错误消息,提示无法将 TextView 转换为 RelativeLayout。

我不清楚的是为什么首先是 TextView。我的列表项布局设置为 RelativeLayout,这应该是膨胀的,除非我弄错了。谁能帮我调试一下?

最佳答案

在这一行:

       convertView = ( RelativeLayout ) inflater.inflate( resource, null );

而不是资源,尝试使用布局的完整 id-R.layout.whatever

此外,您应该只在传入 View 为空时才扩充布局。否则 View 已经膨胀,您应该覆盖它的所有值。

关于android - Android 的自定义 ListView 适配器 - 如何在 getView() 中获得正确的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14347346/

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