Mit onKeyDown Activity beenden

  • Antworten:5
Michael
  • Forum-Beiträge: 19

11.06.2012, 12:32:39 via Website

Hi Leute,

in meiner App habe ich eine Activity die ich gerne nur mittels zurück Buttons beenden will.
Dazu überschreibe ich die Methode: onKeyDown()

1@Override
2 public boolean onKeyDown(int keyCode, KeyEvent event)
3 {
4 if ((keyCode == KeyEvent.KEYCODE_BACK))
5 {
6 final Intent intent = new Intent();
7 intent.putParcelableArrayListExtra ("driverlist", (ArrayList<? extends Parcelable>) m_driverlist);
8 intent.putExtra("planid", mPlanID);
9 setResult(RESULT_OK,intent);
10 finish();
11 }
12 return super.onKeyDown(keyCode, event);
13 }

Wenn ich nun in meiner Activity bin und drück auf meinem Handy die Zurück-Taste, wird zwar der Code in meiner If -Anweisung durchlaufen, aber die Activity beendet sich nicht. Drück ich erneut auf zurück wird der Code wieder durchlaufen und diesmal wird die Activity beenden. Nur ist dann das zurückgegebene Ergebnis immer null ...

Habt ihr eine Idee was ich hier falsch mach?

Danke und Gruß

Michael

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

11.06.2012, 13:19:10 via Website

probier mal ein

1return true;

in deinem if

swordiApps Blog - Website

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

11.06.2012, 13:19:57 via Website

ansonsten könntest du auch einfach

1onBackPressed


überschreiben und dort dein result setzen.

könnte auch funktionieren

swordiApps Blog - Website

Antworten
Michael
  • Forum-Beiträge: 19

11.06.2012, 13:25:31 via Website

1@Override
2 public boolean onKeyDown(int keyCode, KeyEvent event)
3 {
4 if ((keyCode == KeyEvent.KEYCODE_BACK))
5 {
6 final Intent intent = new Intent();
7 intent.putParcelableArrayListExtra ("driverlist", (ArrayList<? extends Parcelable>) m_driverlist);
8 intent.putExtra("planid", mPlanID);
9 setResult(RESULT_OK,intent);
10 finish();
11 }
12 return true;
13 }

gleiches Ergebnis. Ich muss den Button immer noch zweimal drücken, bis die Activity sich beendet. Auch mein Result ist weiterhin null :(

Anbei mal etwas mehr Code:

1public void onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3 setContentView(R.layout.calendar);
4 mContext = this;
5 extras = getIntent().getExtras();
6
7 month = Calendar.getInstance();
8 m_driverlist = (ArrayList<Driver>) extras.get("driverlist");
9 adapter = new CalendarPlanAdapter(this, month);
10 items = new ArrayList<CalendearItem>();
11 mPlanID = extras.getInt("planid");
12
13 GridView gridview = (GridView) findViewById(R.id.gridview);
14 gridview.setAdapter(adapter);
15
16 handler = new Handler();
17 handler.post(calendarUpdater);
18
19
20 TextView title = (TextView) findViewById(R.id.title);
21 title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
22
23 TextView previous = (TextView) findViewById(R.id.previous);
24 previous.setOnClickListener(new OnClickListener() {
25
26 @Override
27 public void onClick(View v) {
28 if(month.get(Calendar.MONTH)== month.getActualMinimum(Calendar.MONTH)) {
29 month.set((month.get(Calendar.YEAR)-1),month.getActualMaximum(Calendar.MONTH),1);
30 } else {
31 month.set(Calendar.MONTH,month.get(Calendar.MONTH)-1);
32 }
33 refreshCalendar();
34 }
35 });
36
37 TextView next = (TextView) findViewById(R.id.next);
38 next.setOnClickListener(new OnClickListener() {
39
40 @Override
41 public void onClick(View v) {
42 if(month.get(Calendar.MONTH)== month.getActualMaximum(Calendar.MONTH)) {
43 month.set((month.get(Calendar.YEAR)+1),month.getActualMinimum(Calendar.MONTH),1);
44 } else {
45 month.set(Calendar.MONTH,month.get(Calendar.MONTH)+1);
46 }
47 refreshCalendar();
48
49 }
50 });
51
52 gridview.setOnItemClickListener(new OnItemClickListener() {
53 public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
54 TextView date = (TextView)v.findViewById(R.id.date);
55 String day = date.getText().toString();
56 CalendearItem item = (CalendearItem) parent.getItemAtPosition(Integer.valueOf(day));
57 if(day.length()<2){
58 day = "0" + day;
59 }
60 if(date instanceof TextView && !date.getText().equals("")) {
61 if(item !=null){
62 ArrayList<Driver> driverlist = new ArrayList<Driver>();
63 driverlist.add(item.getDriver());
64 Intent intent = new Intent(mContext, ChangeDrive.class);
65 intent.putParcelableArrayListExtra ("alldriverlist", (ArrayList<? extends Parcelable>) m_driverlist);
66 intent.putParcelableArrayListExtra ("driverlist", (ArrayList<? extends Parcelable>) driverlist);
67 intent.putExtra("date", android.text.format.DateFormat.format(item.getDay() + "." + "MM.yyyy", month));
68 intent.putExtra("planid", mPlanID);
69 startActivityForResult(intent, CHANGE_DRIVER_REQUEST);
70 }else{
71 Intent intent = new Intent(mContext, ChangeDrive.class);
72 intent.putParcelableArrayListExtra ("alldriverlist", (ArrayList<? extends Parcelable>) m_driverlist);
73 intent.putExtra("date", android.text.format.DateFormat.format(day + "." + "MM.yyyy", month));
74 intent.putExtra("planid", mPlanID);
75 startActivityForResult(intent, CHANGE_DRIVER_REQUEST);
76
77 }
78 finish();
79 }
80
81 }
82 });
83 }
84
85 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
86 super.onActivityResult(requestCode, resultCode, data);
87
88 if (requestCode == CHANGE_DRIVER_REQUEST) {
89 if (resultCode == RESULT_OK) {
90 extras = data.getExtras();
91 m_driverlist.clear();
92 m_driverlist = (ArrayList<Driver>) extras.get("list");
93 }
94 }
95 }
96 private void setItems() {
97 Iterator it = m_driverlist.iterator();
98 while(it.hasNext()){
99 int i = 0;
100 Driver dr = (Driver) it.next();
101 Iterator at = dr.getDrivingDates().iterator();
102 while(at.hasNext()){
103 String date = (String) at.next();
104 String[] dateArray = date.split("-");
105
106 String day = dateArray[2];
107 String rmonth = dateArray[1];
108 String cmonth = String.valueOf(month.get(Calendar.MONTH)+1);
109 if(cmonth.length()==1){
110 cmonth = "0" + cmonth;
111 }
112 int year= new Integer(dateArray[0]);
113 int cyear = month.get(Calendar.YEAR);
114
115 if(rmonth.equals(cmonth) && year == cyear){
116 CalendearItem calitem = new CalendearItem(day, dr);
117 items.add(calitem);
118 }
119 }
120 i++;
121 }
122 }
123
124 public void refreshCalendar()
125 {
126 TextView title = (TextView) findViewById(R.id.title);
127 adapter.refreshDays();
128 adapter.notifyDataSetChanged();
129 handler.post(calendarUpdater); // generate some random calendar items
130 title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
131 }
132
133
134
135 public Runnable calendarUpdater = new Runnable() {
136
137 @Override
138 public void run() {
139 items.clear();
140 setItems();
141 adapter.setItems(items);
142 adapter.notifyDataSetChanged();
143 }
144 };
145
146
147 @Override
148 protected void onResume() {
149 // TODO Auto-generated method stub
150 super.onResume();
151 refreshCalendar();
152 }
153
154
155
156 @Override
157 public boolean onKeyDown(int keyCode, KeyEvent event)
158 {
159 if ((keyCode == KeyEvent.KEYCODE_BACK))
160 {
161 final Intent intent = new Intent();
162 intent.putParcelableArrayListExtra ("driverlist", (ArrayList<? extends Parcelable>) m_driverlist);
163 intent.putExtra("planid", mPlanID);
164 setResult(RESULT_OK,intent);
165 finish();
166 }
167 return true;
168 }
169
170
171}

Gruß

Antworten
Yannick Kordel
  • Forum-Beiträge: 1

22.07.2014, 16:01:44 via Website

Also bei mir funktionierts

Ich hab den Code in meine App eingefügt und es funktioniert ich klicke einmal auf zurück und die App wird beendet :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.07.2014, 17:04:40 via Website

Gut und dafür musst du jetzt so einen alten Thread ausgraben ?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten