В настоящее время я разрабатываю приложение для создания контента для Android. Основная цель - дать пользователю возможность генерировать список из текстовых и графических записей (представленных в конце с помощью EditText и ImageView).Custom ArrayAdapter messing up views, с NullPointerException
Я подключил этот список до ListView путем написания пользовательского ArrayAdapter во время использования ViewHolder Pattern
@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)
Так что, мне кажется, что этот метод вызывается на неверном зрения, потому что в противном случае должен быть объект типа «EditText». Я не совсем уверен, когда ListView запускает все свои представления, и я экспериментирую с моим адаптером и перечисляю много, но я не могу понять, почему это иногда забивает вызовы моих записей. Может ли кто-нибудь мне помочь?
Спасибо, кажется, работает и имеет гораздо больше смысла в отношении того, что адаптер должен знать о моих взглядах. Я реализовал его так, и до сих пор он отлично работает. Я также рассмотрю вид ресайклера, упомянутый @ prats110892, поскольку он, похоже, лучше подходит моим потребностям. – nilo
приветствуются – Blackbelt