- Forum-Beiträge: 33
19.01.2011, 16:59:22 via Website
19.01.2011 16:59:22 via Website
ich möchte einzelne Items einer Liste löschen, weshalb ich die Liste zunächst mit einem SimpleCursorAdapter binde,
um Daten aus meiner Datenbank auf die List View zu projezieren. Anschließend registriere ich die Liste für das Context Menu.
Nun ist es egal welches Item ich anklicke (ID0, ID1, ID2,... IDn-1, IDn), ich erhalte immer den 3. Listeneintrag.
Meine Frage lautet warum dies so ist und nicht dynamisch?
Das Menu ist in XML definiert und sieht so aus:
2<menu xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:id="@+id/edit"
4 android:title="@string/menu_context_edit" />
5 <item android:id="@+id/terminate"
6 android:title="@string/menu_context_terminate" />
7 <item android:id="@+id/delete"
8 android:title="@string/menu_context_delete" />
9</menu>
Die Klasse mit der Liste ist wie folgt aufgebaut:
2 // Constants
3 public static final String TAG = "VertraegeListe";
4 public static final int ACTIVITY_EDIT = 0;
5
6 // Variables
7 private VertraegeDBAdapter mDbHelper;
8 private ListView mAgreementList;
9
10 /** Called when the activity is first created. */
11 @Override
12 public void onCreate(Bundle savedInstanceState) {
13 Log.v(TAG, "Activity State: onCreate()");
14 super.onCreate(savedInstanceState);
15
16 // Initialize mDbHelper
17 mDbHelper = new VertraegeDBAdapter(this);
18 mDbHelper.open();
19
20 // Set layout for this Activity
21 setContentView(R.layout.vertraege_liste);
22
23 // Handling UI objects
24 mAgreementList = (ListView) findViewById(R.id.vertraege_liste);
25
26 // If agreements exist in database project them on list
27 fillData();
28
29 // Register agreement list for context menu (entry 1 => delete, entry 2 => delete, ...)
30 registerForContextMenu(mAgreementList);
31 }
32
33 // The menu, when a user touches a list element for a longer period
34 @Override
35 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
36 super.onCreateContextMenu(menu, v, menuInfo);
37
38 AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
39
40 menu.setHeaderTitle("Aktivitäten [ list id "+info.position+"]");
41
42 MenuInflater inflater = getMenuInflater();
43 inflater.inflate(R.menu.menu_context, menu);
44 }
45
46 // The menu, when a user has touched a list element for a longer period
47 @Override
48 public boolean onContextItemSelected(MenuItem item) {
49 AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
50 switch (item.getItemId()) {
51 case R.id.edit:
52 editAgreement(info.id);
53 return true;
54 case R.id.terminate:
55 generateTermination(info.id);
56 return true;
57 case R.id.delete:
58 confirmDeletionOfAgreement(info.id);
59 return true;
60 default:
61 return super.onContextItemSelected(item);
62 }
63 }
64
65 /**
66 * Get agreements from database and project records on list
67 */
68 private void fillData() {
69 // Get all of the rows from the database and create the item list
70 Cursor mAgreementsCursor = mDbHelper.getAllAgreements();
71 startManagingCursor(mAgreementsCursor);
72
73 // Create an array to specify the fields we want to display in the list (only TITLE)
74 String[] from = new String[]{VertraegeDBAdapter.KEY_AGREEMENTNAME};
75
76 // and an array of the fields we want to bind those fields to (in this case just agreementEntryText)
77 int[] to = new int[]{R.id.agreementEntryText};
78
79 // Now create a simple cursor adapter and set it to display
80 SimpleCursorAdapter agreementsAdapter =
81 new SimpleCursorAdapter(this, R.layout.vertraege_datensatz, mAgreementsCursor, from, to);
82 mAgreementList.setAdapter(agreementsAdapter);
83 }
84}
— geändert am 19.01.2011, 17:38:21
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.