ich die folgende Störung erhalte beim Versuch bestimmten Eintrag aus Listview und hashmap zu löschen:Fehler beim Abruf während bestimmten Eintrag zu entfernen von Listview und hashmap
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:349)
at android.widget.AdapterView.getItemAtPosition(AdapterView.java:790)
at com.example.cmmalli.helloworld.MainActivity.onContextItemSelected(MainActivity.java:120)
at android.app.Activity.onMenuItemSelected(Activity.java:3224)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:406)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:195)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103)
at com.android.internal.policy.PhoneWindow$PhoneWindowMenuCallback.onMenuItemSelected(PhoneWindow.java:3722)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
at com.android.internal.view.menu.MenuPopup.onItemClick(MenuPopup.java:128)
at android.widget.AdapterView.performItemClick(AdapterView.java:310)
at android.widget.AbsListView.performItemClick(AbsListView.java:1155)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3126)
at android.widget.AbsListView$3.run(AbsListView.java:4041)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
mein Code:
public class MainActivity extends AppCompatActivity {
ArrayAdapter adapter;
TextView user_name;
TextView user_amount;
ImageButton addbtn;
ListView listView;
HashMap<String, Double> myMap = new HashMap<String, Double>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
user_name = (TextView) findViewById(R.id.nameeditText);
user_amount = (TextView) findViewById(R.id.amounteditText);
addbtn = (ImageButton)findViewById(R.id.moreImageButton);
listView = (ListView)findViewById(R.id.simple_list_item_1);
registerForContextMenu(listView);
adapter = new ArrayAdapter<User>(
MainActivity.this,
android.R.layout.simple_list_item_1);
listView.setAdapter(adapter);
addbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = user_name.getText().toString();
Double amount = Double.parseDouble(user_amount.getText().toString());
adapter.add(new User(name, amount));
adapter.notifyDataSetChanged();
myMap.put(name,amount);
Iterator myVeryOwnIterator = myMap.keySet().iterator();
while(myVeryOwnIterator.hasNext()) {
Toast.makeText(getBaseContext(), (String) myVeryOwnIterator.next(),
Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options");
if (v.getId()==R.id.simple_list_item_1) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_list, menu);
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
android.widget.AdapterView.AdapterContextMenuInfo info = (android.widget.AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch(item.getItemId()) {
case R.id.edit:
//edit name or amount here
return true;
case R.id.delete:
adapter.remove(listView.getItemAtPosition(info.position));
adapter.notifyDataSetChanged();
myMap.remove(listView.getItemAtPosition(info.position));
return true;
case R.id.deleteall:
adapter.clear();
adapter.notifyDataSetChanged();
myMap.clear();
return true;
default:
return super.onContextItemSelected(item);
}
}
public class User {
public String name;
public double amount;
public User(String name, double amount) {
this.name = name;
this.amount = amount;
}
@Override
public String toString() {
return format("%s : %.2f", this.name, this.amount);
}
}
Auf lange Klicken Sie in der Listenansicht auf eine Zeile, um Optionen zum Bearbeiten, Löschen und Löschen zu erhalten. Alle Optionen löschen, aber die Option für bestimmte Zeilen löscht einen Fehler. Ich bin mir nicht sicher, wo ich falsch liege. Vorschläge würden sehr geschätzt werden. Ich versuche Username und Betrag vom Benutzer zu übernehmen und dann in der Listview anzuzeigen und das Schlüsselwertpaar in einer Hashmap zu speichern, damit es auch editiert werden kann.
Ich versuche HashMapAdapter einen benutzerdefinierten Adapter zu verwenden, der den Basisadapter dafür erweitert, aber nicht sicher ist, wie er Werte festlegen und abrufen kann. Ich bin mir auch nicht sicher, wie man den HashMapadapter auf listview setzt und wie man Werte setzt und bekommt. es wäre toll, wenn jemand mir das auch ein bisschen näher bringen könnte. Verwenden des folgenden benutzerdefinierten Adapterbeispiels [http://stackoverflow.com/questions/5234576/what-adapter-shall-i-use-to-use-hashmap-in-a-listview/40531313#40531313] – charsi
Ihr Adapter ist leer , anscheinend. Wie können Sie einen Gegenstand auswählen, um ihn zu löschen? –