notifyDataSetChanged () - IndexOutOfBoundException
Ich verstehe nicht, was los ist
Ich benutze
public class UrlArrayAdapter extends BaseAdapter {...
ArrayList<UrlItem> objects;
UrlArrayAdapter(Context context, ListView urlListView,
ArrayList<UrlItem> urlLists) {
objects = urlLists; ...
//method
public void deleteItem(int numberToDelete) {
objects.remove(numberToDelete);
notifyDataSetChanged();
}
UND (das interessanteste)
Ich erhalte numberToDelete = 1
Diese Linie wird dann entfernt
aber Objekte
und wenn numberToDelete = 0 ist
Diese Linie wird dann entfernt
aber Objekte
UND wenn numberToDelete = 2
Objekte
aber nach notifyDataSetChanged (); IndexOutOfBoundException
Ich habe bereits einen Beitrag ... aber ich kann dieses Problem nicht lösen
IndexOutOfBoundException, wenn ich notifyDataSetChanged verwende
stackoverflow.com/a/9260757/1568164 Ich habe das Gefühl, dass dies die Situation ist, die ich verwende, aber nicht funktioniert
Dann bekomme ich eine Position weiter zu entfernen
public View getView(int position, View convertView, ViewGroup parent) {
// Planet to display
UrlItem urlItem = (UrlItem) this.getItem(position);
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = lInflater.inflate(R.layout.database_table_item, null);
viewHolder = new ViewHolder();
viewHolder.checkbox = (CheckBox) convertView
.findViewById(R.id.checkBox1);
viewHolder.checkbox.setOnCheckedChangeListener(listener1);
viewHolder.text = (EditText) convertView
.findViewById(R.id.editText1);
viewHolder.text
.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
int getPosition = (Integer) v.getTag();
if (!hasFocus) {
final EditText Caption = (EditText) v;
// urlLists
objects.get(getPosition).setUrl(
Caption.getText().toString());
} else {
DatabaseTable.setPosition(getPosition); // This is a future for "numberToDelete"
}
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.checkBox1, viewHolder.checkbox);
convertView.setTag(R.id.editText1, viewHolder.text);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.text.setTag(position);
viewHolder.text.setText(urlItem.getUrl());
viewHolder.checkbox.setTag(position);
viewHolder.checkbox.setChecked(urlItem.getUse());
return convertView;
}
Meine Basisaktivität, bei der ich die Umzugslinie anrufe
public class DatabaseTable extends Activity {
private Settings setting;
private ArrayList<UrlItem> urlLists;
private ListAdapter uAdapter;
private ListView urlListView;
static int position;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.database_table_list);
LBD conection = new LBD(this);
conection.open();
setting = conection.tblSettings();
setting.create();
urlLists = setting.selectRssTable();
urlListView = (ListView) findViewById(R.id.listView1);
uAdapter = new UrlArrayAdapter(DatabaseTable.this, urlListView,
urlLists);
urlListView.setAdapter(uAdapter);
urlListView.setItemsCanFocus(true);
}
public static void setPosition(int pos) {
position = pos;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, 2, 2, "Delete URL");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 2:
((UrlArrayAdapter) uAdapter).deleteItem(position);
break;
}
return super.onOptionsItemSelected(item);
}
}
Fortsetzung des Themas Ich experimentierte und kam zu dem Schluss, dass die Zeichenfolgen in der Liste der Adapter wenig mit der Tatsache zu tun haben, dass die Ausgabe auf dem Bildschirm, also die Herausforderung, sich ändert. müssen verstehen, wie man Zeilen vom Bildschirm löscht