gpt4 book ai didi

android - 自定义 ArrayAdapter 使用 NullPointerException 打乱 View

转载 作者:可可西里 更新时间:2023-10-31 22:03:46 28 4
gpt4 key购买 nike

我目前正在为 Android 开发内容创建应用程序。它的主要目的是让用户生成一个包含文本和图像条目的列表(最后由 EditText 和 ImageView 表示)。

我通过使用 ViewHolder 模式编写自定义 ArrayAdapter 将此列表连接到 ListView

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

// get current Entry
Entry e = getItem(position);
// variable for holding the view
ViewHolder holder;

// check if there is no view created
if (convertView == null) {
// prepare holder for view to be saved in
holder = new ViewHolder();

// get layout inflater
LayoutInflater inflater = (LayoutInflater) super.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

// if current entry is an image entry
if (e.getType().equals(Entry.Type.IMAGE_ENTRY)) {
// inflate layout with ImageView
convertView = inflater.inflate(R.layout.image_list_item,
parent, false);
ImageView iView = (ImageView) convertView
.findViewById(R.id.imageDisplay);

// save inflated view in holder
holder.imageViewItem = iView;

// store the holder with the view
convertView.setTag(holder);

// if it is a text entry
} else if (e.getType().equals(Entry.Type.TEXT_ENTRY)) {
// inflate layout with EditText
convertView = inflater.inflate(R.layout.text_list_item, parent,
false);
EditText tView = (EditText) convertView
.findViewById(R.id.textField);

// save inflated view in holder
holder.editTextItem = tView;

// store the holder with the view
convertView.setTag(holder);

}
} else {
// get holder from existing view
holder = (ViewHolder) convertView.getTag();
}
if (e != null) {
if (e.getType().equals(Entry.Type.IMAGE_ENTRY)) {
// load corresponding image
holder.imageViewItem.setImageBitmap(((ImageEntry) e).getImage());
} else if (e.getType().equals(Entry.Type.TEXT_ENTRY)) {
// load corresponding text
holder.editTextItem.setText(((TextEntry) e).getText());
}
}
return convertView;
}

与我看到的教程和示例相反,由于文本和图像条目之间的差异,我需要区分我膨胀的布局。这似乎造成了一些麻烦,因为有时在一个接一个地添加不同的条目后,我会得到这些异常

E/AndroidRuntime(15812): java.lang.NullPointerException: Attempt to     invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference 
E/AndroidRuntime(15812): at <project>.util.EntryListAdapter.getView(EntryListAdapter.java:104)

所以,在我看来,该方法在错误的 View 上被调用,否则必须有一个“EditText”类型的对象。我不太确定 ListView 何时触发其所有 View 被重绘,我一直在试验我的适配器并列出很多但我无法弄清楚为什么它有时会弄乱对我的条目的调用。有人可以帮我吗?

最佳答案

如果你不覆盖getViewTypeCount,你将只会得到一个空的convertView,所以你将用image_list_item.xmltext_list_item.xml。如果你想处理不同类型的 View 覆盖

 public int getViewTypeCount() {
return 2;
}

处理两种不同类型的 View ,以及getItemViewType

public int getItemViewType (int position) {
Entry e = getItem(position);
if (e.getType().equals(Entry.Type.IMAGE_ENTRY)) {
return 0;
}
return 1;
}

并在 getView 中检查 getItemViewType 的返回值

关于android - 自定义 ArrayAdapter 使用 NullPointerException 打乱 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30696487/

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