1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. Butch78, 12.06.2012 #1
    Butch78

    Butch78 Threadstarter Junior Mitglied

    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
     
  2. swordi, 12.06.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    finish ruft immer onresume auf ? meinst du in der gleichen activity ? oder sind das code ausschnitte von 2. verschiedenen activities ?
     
  3. Butch78, 12.06.2012 #3
    Butch78

    Butch78 Threadstarter Junior Mitglied

    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]
     
  4. Tom299, 12.06.2012 #4
    Tom299

    Tom299 Android-Experte

    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 ...
     
  5. Butch78, 12.06.2012 #5
    Butch78

    Butch78 Threadstarter Junior Mitglied

    habs gerade mal überprüft, bei finish() wird anschließend tatsächlich wieder onCreate durchlaufen... Aber warum nur?

    Gruß
     
  6. Tom299, 12.06.2012 #6
    Tom299

    Tom299 Android-Experte

    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 ;-)
     
  7. Butch78, 12.06.2012 #7
    Butch78

    Butch78 Threadstarter Junior Mitglied

    ok ich werds versuchen. Wie konntest du damals dein Problem umgehen?
     
  8. Tom299, 12.06.2012 #8
    Tom299

    Tom299 Android-Experte

    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.
     
  9. Butch78, 12.06.2012 #9
    Butch78

    Butch78 Threadstarter Junior Mitglied

    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 ?
     
  10. Tom299, 12.06.2012 #10
    Tom299

    Tom299 Android-Experte

    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);
    	}
    
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Integer-Wert übertragen auf zweite Activity Android App Entwicklung Freitag um 15:59 Uhr
[ERLEDIGT] Bitmap von Activity an Activity übergben Android App Entwicklung 03.09.2017
[OFFEN] Activity als Dialog - RecyclerView funktioniert nicht mehr Android App Entwicklung 14.08.2017
[OFFEN] Problem mit meiner Login App Android App Entwicklung 10.06.2017
[GELÖST] Nach AS Update Fehler Error running app: Default Activity not found Android App Entwicklung 16.05.2017
[GELÖST] Übergabe an zweite Activity Android App Entwicklung 11.05.2017
[ERLEDIGT] Problem beim Starten einer neuen Activity Android App Entwicklung 21.03.2017
Intent mit Daten (putExtra) zu anderer Activity Android App Entwicklung 14.02.2017
Wie wird RelativeLayout.LayoutParams richtig angewendet ? Android App Entwicklung 24.01.2017
Snackbar beenden Android App Entwicklung 31.12.2016

Benutzer fanden diese Seite durch die Suche nach:

  1. intent beenden android

    ,
  2. finish onClick android

    ,
  3. android studio activity beenden

    ,
  4. activity schliessen,
  5. android intent schließen
Du betrachtest das Thema "Activity richtig beenden" im Forum "Android App Entwicklung",