0
0xnull
Neues Mitglied
- 0
Hallo zusammen,
mich plagt momentan eine Nullpointer-Exception und ich weiß leider nicht, wie ich sie beheben kann. In einer ListView stelle ich verschiedene Sprachen als Strings dar. Klicke ich lange auf eine, so öffnet sich ein Kontextmenü mit den Einträgen "edit" und "delete". Klickt man auf "edit", so soll in der entsprechenden ListView-Zeile anstatt der Sprache ein EditText und ein Button erscheinen. Sobald ich diesem Button einen onClickListener zuweisen möchte, kommt es aber zur NullpointerException, da der Button aus irgendeinem Grund null bleibt. Die Exception tritt in der "editLanguage"-Methode auf.
Hier der entsprechende Code:
Kontextmenü
Im Adapter:
editLanguage-Methode
Warum findet findViewByID den Button "bu_language_change" nicht? Er wurde doch im Adapter geladen.
Vielen Dank und beste Grüße
0xnull
mich plagt momentan eine Nullpointer-Exception und ich weiß leider nicht, wie ich sie beheben kann. In einer ListView stelle ich verschiedene Sprachen als Strings dar. Klicke ich lange auf eine, so öffnet sich ein Kontextmenü mit den Einträgen "edit" und "delete". Klickt man auf "edit", so soll in der entsprechenden ListView-Zeile anstatt der Sprache ein EditText und ein Button erscheinen. Sobald ich diesem Button einen onClickListener zuweisen möchte, kommt es aber zur NullpointerException, da der Button aus irgendeinem Grund null bleibt. Die Exception tritt in der "editLanguage"-Methode auf.
Hier der entsprechende Code:
Kontextmenü
Code:
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
LanguageItem selectedLanguage = languages.get((int) info.id);
switch (item.getItemId()) {
case EDIT:
languages.get((int) info.id).setSelected(); // set edit flag
adapter.update(languages);
adapter.notifyDataSetChanged();
editLanguage(selectedLanguage); // update database
break;
case DELETE:
Code:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder; // ViewHolder pattern
int type = getItemViewType(position);
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater();
switch(type) {
case DEFAULT_LINE:
convertView = inflater.inflate(R.layout.language_row_default, null);
viewHolder.textView = (TextView) convertView.findViewById(R.id.tv_language_default_line);
break;
case EDIT_LINE:
convertView = LayoutInflater.from(getContext()).inflate(R.layout.language_row_edit, null);
viewHolder.editText = (EditText) convertView.findViewById(R.id.ed_language_change);
viewHolder.button = (Button) convertView.findViewById(R.id.bu_language_change);
break;
default:
// TODO throw exception
Log.i(TAG, "default" + type);
}
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag(); // avoided to call findViewById
}
switch(type) {
case DEFAULT_LINE:
viewHolder.textView.setText(languageItems.get(position).getLanguageName());
break;
case EDIT_LINE:
viewHolder.editText.setText(languageItems.get(position).getLanguageName());
break;
}
Log.i(TAG, "getView");
return convertView;
}
Code:
rivate void editLanguage(final LanguageItem languageToEdit) {
final EditText editLanguage = (EditText) this.findViewById(R.id.ed_language_change); // [COLOR=Red]--> hier kommt es zur NullpointerException[/COLOR]
Button editButtonConfirm = (Button) this.findViewById(R.id.bu_language_change);
editButtonConfirm.setOnClickListener(new OnClickListener() {
Vielen Dank und beste Grüße
0xnull