[Java] Übergabe von Var Problem

  • Antworten:0
Gelöschter Account
  • Forum-Beiträge: 694

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?

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}

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}

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

Antworten