Ich verstehe nicht, was falsch istnotifyDataSetChanged() - IndexOutOfBoundException
ich bin
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 (die interessanteste)
ich numberToDelete = 1
Diese Zeile wird dann entfernt
aber Objekte
und wenn numberToDelete = 0
Diese Zeile dann
entferntaber Objekte
UND wenn numberToDelete = 2
Objekte
aber nach notifyDataSetChanged(); IndexOutOfBoundException
Ich habe bereits einen Beitrag ... aber ich kann dieses Problem nicht lösen
IndexOutOfBoundException when I use notifyDataSetChanged
stackoverflow.com/a/9260757/1568164 Ich fühle, dass die Situation dies ist, ich benutze aber die Arbeit nicht
Dann bekomme ich eine Position weiter
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 Basis Aktivität zu entfernen, wo Ich nenne die Entnahmeleitung
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 experimentiert und festgestellt, dass die Strings in der Liste der Adapter wenig mit der Tatsache zu tun haben, dass die Ausgabe auf dem Bildschirm, so dass die Herausforderung verändert. müssen verstehen, wie Zeilen aus dem Bildschirm zu löschen
können Sie den Code zu Ihrer Frage hinzufügen zu beheben links, wo, wenn Sie wählen ein Objekt aus der Tabelle Sie geben den Index dieses Objekts zurück? –
Ich habe hinzugefügt, siehe –
Was ist 'int position', ist dies der Index des gewählten UrlItem? –