Gelöschter Account
- Forum-Beiträge: 694
17.07.2012, 12:07:01 via Website
17.07.2012 12:07:01 via Website
Beim Lesen eines anderen Threads hier wollte ich mal etwas ausprobieren. Ich bin aber gerade etwas vernagelt und finde einfach keine gute Lösung.
Es geht um eine ListActivity. Beim langen Click auf eine Zeile wird der onContextIemSelected ausgelöst. Diese Zeile will ich löschen. Ich hole mir die _id der Zeile und starte eine Sicherheitsabfrage. Wie bekomme ich aber nun die _id der Zeile in den onClick Event. Ich würde gerne auf eine Instanzvariable verzichten da ich das für nicht richtig halte.
Wie sähe eine saubere Lösung aus?
Derzeit löse ich das grundsätzlich anders und erzeuge den Listener inline:
Da ich grundsätzlich für neue Methoden offen bin würde mich das mal interessieren.
Danke.
Es geht um eine ListActivity. Beim langen Click auf eine Zeile wird der onContextIemSelected ausgelöst. Diese Zeile will ich löschen. Ich hole mir die _id der Zeile und starte eine Sicherheitsabfrage. Wie bekomme ich aber nun die _id der Zeile in den onClick Event. Ich würde gerne auf eine Instanzvariable verzichten da ich das für nicht richtig halte.
Wie sähe eine saubere Lösung aus?
1public class MyListActivity extends ListActivity implements DialogInterface.OnClickListener {
2
3 @Override
4 public boolean onContextItemSelected(MenuItem menuItem) {
5 AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) menuItem.getMenuInfo();
6
7 long _id = menuInfo.id; // Wird im onClick benötigt
8
9 if (menuItem.getItemId() == R.id.men_delete) {
10 AlertDialog.Builder builder = new AlertDialog.Builder(this);
11 builder.setNegativeButton(android.R.string.cancel, this);
12 builder.setPositiveButton(android.R.string.ok, this);
13 builder.setCancelable(false);
14 builder.setMessage(R.string.txt_really);
15 builder.show();
16 return true;
17 }
18
19 return super.onContextItemSelected(menuItem);
20 }
21
22 @Override
23 public void onClick(DialogInterface interface, int which) {
24 if (which == DialogInterface.BUTTON_NEGATIVE) {
25 interface.dismiss();
26 } else if (which == DialogInterface.BUTTON_POSITIVE) {
27 MyApplication.getSqliteOpenHelper().deleteTrack(_id); // _id aus dem onContextItemSelected
28 interface.dismiss();
29 }
30 }
31}
2
3 @Override
4 public boolean onContextItemSelected(MenuItem menuItem) {
5 AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) menuItem.getMenuInfo();
6
7 long _id = menuInfo.id; // Wird im onClick benötigt
8
9 if (menuItem.getItemId() == R.id.men_delete) {
10 AlertDialog.Builder builder = new AlertDialog.Builder(this);
11 builder.setNegativeButton(android.R.string.cancel, this);
12 builder.setPositiveButton(android.R.string.ok, this);
13 builder.setCancelable(false);
14 builder.setMessage(R.string.txt_really);
15 builder.show();
16 return true;
17 }
18
19 return super.onContextItemSelected(menuItem);
20 }
21
22 @Override
23 public void onClick(DialogInterface interface, int which) {
24 if (which == DialogInterface.BUTTON_NEGATIVE) {
25 interface.dismiss();
26 } else if (which == DialogInterface.BUTTON_POSITIVE) {
27 MyApplication.getSqliteOpenHelper().deleteTrack(_id); // _id aus dem onContextItemSelected
28 interface.dismiss();
29 }
30 }
31}
Derzeit löse ich das grundsätzlich anders und erzeuge den Listener inline:
1public class MyListActivity extends ListActivity {
2
3@Override
4public boolean onContextItemSelected(MenuItem menuItem) {
5 AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) menuItem.getMenuInfo();
6
7 final long _id = menuInfo.id; // final _id
8
9 if (menuItem.getItemId() == R.id.men_delete) {
10 AlertDialog.Builder builder = new AlertDialog.Builder(this);
11 builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
12
13 @Override
14 public void onClick(DialogInterface interface, int which) {
15 interface.dismiss();
16 }
17 } );
18 builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
19
20 @Override
21 public void onClick(DialogInterface interface, int which) {
22 MyApplication.getSqliteOpenHelper().deleteTrack(_id); // _id wird gelöscht
23 interface.dismiss();
24 }
25 } );
26 builder.setCancelable(false);
27 builder.setMessage(R.string.txt_really);
28 builder.show();
29 return true;
30 }
31
32 return super.onContextItemSelected(menuItem);
33}
34}
2
3@Override
4public boolean onContextItemSelected(MenuItem menuItem) {
5 AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) menuItem.getMenuInfo();
6
7 final long _id = menuInfo.id; // final _id
8
9 if (menuItem.getItemId() == R.id.men_delete) {
10 AlertDialog.Builder builder = new AlertDialog.Builder(this);
11 builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
12
13 @Override
14 public void onClick(DialogInterface interface, int which) {
15 interface.dismiss();
16 }
17 } );
18 builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
19
20 @Override
21 public void onClick(DialogInterface interface, int which) {
22 MyApplication.getSqliteOpenHelper().deleteTrack(_id); // _id wird gelöscht
23 interface.dismiss();
24 }
25 } );
26 builder.setCancelable(false);
27 builder.setMessage(R.string.txt_really);
28 builder.show();
29 return true;
30 }
31
32 return super.onContextItemSelected(menuItem);
33}
34}
Da ich grundsätzlich für neue Methoden offen bin würde mich das mal interessieren.
Danke.
— geändert am 17.07.2012, 12:09:25
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.