Activity richtig beenden

B

Butch78

Neues Mitglied
0
Hi zusammen,

ich habe ein kleines Problem beim Beenden meiner Activity.
Dies mache ich derzeit so:

Code:
@Override
 protected void onResume() {
  // TODO Auto-generated method stub
  
  if(updateIsRequired){
   refreshCalendar();
  }
  super.onResume();
  
 }

 public void onButtonClick(View v){
  final Intent intent = new Intent();
  intent.putParcelableArrayListExtra ("resultlist", (ArrayList<? extends Parcelable>) m_driverlist); 
  intent.putExtra("planid", mPlanID);
  if (getParent() == null) {
      setResult(Activity.RESULT_OK, intent);
  } else {
      getParent().setResult(Activity.RESULT_OK, intent);
  }
  updateIsRequired = false;
  finish();
 
 }

Wenn ich auf meinen Beenden-Button klicke sollen verschiedene Werte als Ergebnis zurückgegeben werden. Mein Problem ist, dass finish() immer die onResume Methode aufruft und diese dort dann mit der Methode refreshCalendar() wieder meine alten Werte herstellt. Dann habe ich versucht mittels der globalen Variable "updateIsRequired" dies zu verhindern. Diese setze ich auch auf false, aber in der onResume-Methode steht diese dann wieder auf "true" und refreshCalendar() wird wieder durchlaufen...

Hab schon viel gesucht, gelesen und ausprobiert aber auf den Fehler bin ich bisher leider noch nicht gekommen :(

Hoffe ihr könnt mir helfen..

Grüße

Butch
 
finish ruft immer onresume auf ? meinst du in der gleichen activity ? oder sind das code ausschnitte von 2. verschiedenen activities ?
 
Hi,

ja das geschieht in der gleichen activity. Evtl. liegt ja das Problem darin, dass ich in meiner Activity eine weitere Activity mit
startActivityForResult aufrufe?

Zur Vollständigkeit hier meine komplette Actvity.

Code:
[LEFT] public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.calendar);
     mContext = this;
     extras = getIntent().getExtras();
          
     month = Calendar.getInstance();
     m_driverlist = (ArrayList<Driver>) extras.get("driverlist"); 
     
     adapter = new CalendarPlanAdapter(this, month);
     items = new ArrayList<CalendearItem>();
     mPlanID = extras.getInt("planid");
     
     GridView gridview = (GridView) findViewById(R.id.gridview);
     gridview.setAdapter(adapter);
     
     handler = new Handler();
     handler.post(calendarUpdater);
     
     TextView title  = (TextView) findViewById(R.id.title);
     title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
     
     TextView previous  = (TextView) findViewById(R.id.previous);
     previous.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    if(month.get(Calendar.MONTH)== month.getActualMinimum(Calendar.MONTH)) {    
     month.set((month.get(Calendar.YEAR)-1),month.getActualMaximum(Calendar.MONTH),1);
    } else {
     month.set(Calendar.MONTH,month.get(Calendar.MONTH)-1);
    }
    refreshCalendar();
   }
  });
     
     TextView next  = (TextView) findViewById(R.id.next);
     next.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    if(month.get(Calendar.MONTH)== month.getActualMaximum(Calendar.MONTH)) {    
     month.set((month.get(Calendar.YEAR)+1),month.getActualMinimum(Calendar.MONTH),1);
    } else {
     month.set(Calendar.MONTH,month.get(Calendar.MONTH)+1);
    }
    refreshCalendar();
    
   }
  });
     
  gridview.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
       TextView date = (TextView)v.findViewById(R.id.date);
          String day = date.getText().toString();
       CalendearItem item = (CalendearItem) parent.getItemAtPosition(Integer.valueOf(day));       
          if(day.length()<2){
           day = "0" + day;
          }
       if(date instanceof TextView && !date.getText().equals("")) {
           if(item !=null){
            ArrayList<Driver> driverlist = new ArrayList<Driver>();
            driverlist.add(item.getDriver());
      Intent intent = new Intent(mContext, ChangeDrive.class); 
            intent.putParcelableArrayListExtra ("alldriverlist", (ArrayList<? extends Parcelable>) m_driverlist);   
            intent.putParcelableArrayListExtra ("driverlist", (ArrayList<? extends Parcelable>) driverlist);   
            intent.putExtra("date", android.text.format.DateFormat.format(item.getDay() + "." + "MM.yyyy", month));
            intent.putExtra("planid", mPlanID);
      startActivityForResult(intent, CHANGE_DRIVER_REQUEST);
           }else{
      Intent intent = new Intent(mContext, ChangeDrive.class); 
            intent.putParcelableArrayListExtra ("alldriverlist", (ArrayList<? extends Parcelable>) m_driverlist);   
            intent.putExtra("date", android.text.format.DateFormat.format(day + "." + "MM.yyyy", month));
            intent.putExtra("planid", mPlanID);
      startActivityForResult(intent, CHANGE_DRIVER_REQUEST);
           }                        
          }
     
      }
  });
 }
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  
  if (requestCode == CHANGE_DRIVER_REQUEST) {
            if (resultCode == RESULT_OK) {          
               extras = data.getExtras();  
               m_driverlist.clear();         
               m_driverlist = (ArrayList<Driver>) extras.get("list");   
               //finish();
          }
  }  
 }
 private void setItems() {
  Iterator it = m_driverlist.iterator();
  while(it.hasNext()){
   int i = 0;
   Driver dr = (Driver) it.next();
   Iterator at = dr.getDrivingDates().iterator();
   while(at.hasNext()){
    String date = (String) at.next();     
    String[] dateArray = date.split("-");
    
    String day = dateArray[2];
    String rmonth = dateArray[1];
    String cmonth = String.valueOf(month.get(Calendar.MONTH)+1);
    if(cmonth.length()==1){
     cmonth = "0" + cmonth;
    }
    int year= new Integer(dateArray[0]);
    int cyear = month.get(Calendar.YEAR);
  
    if(rmonth.equals(cmonth) && year == cyear){
     CalendearItem calitem = new CalendearItem(day, dr);
     items.add(calitem);
    }
   } 
   i++;
  }
 }
 public void refreshCalendar()
 {
   TextView title  = (TextView) findViewById(R.id.title);  
   adapter.refreshDays();
   adapter.notifyDataSetChanged();      
   handler.post(calendarUpdater); // generate some random calendar items      
   title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
 }
 
 private void test(){
  items.clear();
  setItems(); 
  adapter.setItems(items);
  adapter.notifyDataSetChanged(); 
 }

 public Runnable calendarUpdater = new Runnable() {
  @Override
  public void run() {
   items.clear();
   setItems(); 
   adapter.setItems(items);
   adapter.notifyDataSetChanged();  
  }   
 };

 @Override
 protected void onResume() {
  // TODO Auto-generated method stub
  
  if(updateIsRequired){
   refreshCalendar();
  }
  super.onResume();
  
 }

 public void onButtonClick(View v){
  final Intent intent = new Intent();
  intent.putParcelableArrayListExtra ("resultlist", (ArrayList<? extends Parcelable>) m_driverlist); 
  intent.putExtra("planid", mPlanID);
  if (getParent() == null) {
      setResult(Activity.RESULT_OK, intent);
  } else {
      getParent().setResult(Activity.RESULT_OK, intent);
  }
  updateIsRequired = false;
  finish();
 
 }
 
 @Override
 protected void onDestroy() {
  super.onDestroy();
  finish();
 }
}

Gruß[/LEFT]
 
Ich hatte mal ein ähnliches Problem. Hatte im onKeyDown den Back-Button abgefragt, allerdings wurden da noch Checks usw. durchgeführt und evtl. mußte man noch einen Dialog bestätigen. Beim finish() wurde dann die aktuelle Activity beendet, aber gleichzeitig wieder eine neue erstellt (onCreate). Wieso weshalb warum hab ich nie rausgefunden, hab meine Logik dann komplett umschreiben müssen ...
 
habs gerade mal überprüft, bei finish() wird anschließend tatsächlich wieder onCreate durchlaufen... Aber warum nur?

Gruß
 
also hast du den gleichen Effekt wie ich damals ... und ich hatte keine Lösung gefunden ... ich hatte auch in der manifest mal rumgespielt und die verschiedenen launchMode's ausprobiert, hat aber alles nichts gebracht ... falls du ne Lösung findest, her damit ;-)
 
ok ich werds versuchen. Wie konntest du damals dein Problem umgehen?
 
ich hab finish() nicht mehr genutzt, sondern die logik so umgestrickt, daß ich mit dem back-button aus der activity raus bin, die wurde dann automatisch beendet.
 
das hier hatte ich auch schon versucht:

Code:
@Override
    public void onBackPressed() {
            super.onBackPressed();
            this.finish();
    }

Aber auch ohne Erfolg... Hast du noch die Methode zur Hand ?
 
z.B. :
Code:
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {			
			if (doSomething()) {
                           return true;
                        }
                        else {
			   return false;
                        }
		}
		
		return super.onKeyDown(keyCode, event);
	}
 

Ähnliche Themen

M
  • maksimilian
Antworten
15
Aufrufe
1.695
maksimilian
M
S
Antworten
7
Aufrufe
1.152
swa00
swa00
Hansimglueck0815
Antworten
0
Aufrufe
731
Hansimglueck0815
Hansimglueck0815
Zurück
Oben Unten