2016-08-08 64 views
0

Ich habe drei Aktivitäten, die erste wird verwendet, um einige Werte aus der Datenbank zu halten, und eine Listenansicht wurde auf der zweiten angezeigt, wenn ich auf ein Element in der Listenansicht klicken, werde ich zur dritten Aktivität und in der Lage springen Um das ausgewählte Element zu bearbeiten, werden nach dem Aktualisieren der Daten in der Datenbank neue Daten in der zweiten Aktivität angezeigt. Wenn ich jedoch zur ersten Aktivität zurückkehre, wurde nichts aktualisiert. Wie kann ich die aktualisierten Daten auch in der ersten Aktivität abrufen? ? Jede Hilfe wird geschätzt.android Wie kann ich meine Hauptaktivität aktualisieren, nachdem ich die Datenbank aktualisiert habe?

Der zweite Aktivitätscode:

import android.content.ContentValues; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.util.Log; 
    import android.view.Menu; 
    import android.view.MenuInflater; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.ListAdapter; 
    import android.widget.ListView; 
    import android.widget.Toast; 

    public class SetupActivity extends AppCompatActivity { 

     private Context context; 
     static String extra = "values"; 
     ListView mListView; 

     final String[] setItems = {"name","birthday","type","sex"}; 

     @Override 
     public void onCreate(Bundle savedInstance){ 
      super.onCreate(savedInstance); 
      setContentView(R.layout.setuplist); 
      mListView = (ListView)findViewById(R.id.listview); 

      context = this; 
      updateView(); 

     } 

     private void updateView(){ 
      DogDatabaseHelper dbHelper= new DogDatabaseHelper(getApplicationContext()); 
      SQLiteDatabase db = dbHelper.getWritableDatabase(); 
      Cursor cursor = db.query("Dog",null,null,null,null,null,null,null); 
      if(cursor.moveToFirst()){ 
       String name = cursor.getString(cursor.getColumnIndex("name")); 
       String birthday = cursor.getString(cursor.getColumnIndex("birthday")); 
       String size = cursor.getString(cursor.getColumnIndex("size")); 
       String sex = cursor.getString(cursor.getColumnIndex("sex")); 

       final String[] setValues = {name,birthday,size,sex}; 
       ListAdapter listAdapter = new CustomAdapter(this,setItems,setValues); 
       mListView.setAdapter(listAdapter); 

       mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
         String setupItemValue = setValues[position]; 
         String setupItem = setItems[position]; 
         Intent intent; 
         if(setupItem.equals("name")){ 
          intent = new Intent(SetupActivity.this,ChangeName.class); 
          intent.putExtra(extra,setupItemValue); 
          startActivityForResult(intent,1); 
         } else if(setupItem.equals("birthday")){ 
          intent = new Intent(SetupActivity.this,ChangeBirthday.class); 
          intent.putExtra(extra,setupItemValue); 
          startActivityForResult(intent,2); 
         }else if(setupItem.equals("type")){ 
          intent = new Intent(SetupActivity.this,ChangeType.class); 
          intent.putExtra(extra,setupItemValue); 
          startActivityForResult(intent,3); 
         }else{ 
          intent = new Intent(SetupActivity.this,ChangeSex.class); 
          intent.putExtra(extra,setupItemValue); 
          startActivityForResult(intent,4); 
         } 

        } 
       }); 
      } 
      cursor.close(); 
     } 

     @Override 
     protected void onActivityResult(int requestCode,int resultCode,Intent data){ 

      DogDatabaseHelper dbHelper= new DogDatabaseHelper(getApplicationContext()); 
      SQLiteDatabase db = dbHelper.getWritableDatabase(); 
      Cursor cursor = db.query("Dog",null,null,null,null,null,null,null); 
      switch (requestCode){ 
       case 1: 
        if (resultCode == RESULT_OK){ 

         ContentValues cv = new ContentValues(); 
         cv.put("name",data.getStringExtra("return_name")); 
         db.update("dog",cv,"id=?",new String[]{"1"}); 

        } 
        break; 
       case 2: 
        Toast.makeText(this, "Update2", Toast.LENGTH_SHORT).show(); 
        if(resultCode == RESULT_OK){ 
         ContentValues cv = new ContentValues(); 
         cv.put("birthday",data.getStringExtra("return_birthday")); 
         db.update("dog",cv,"id=?",new String[]{"1"}); 

        } 
        break; 
       case 3: 
        Toast.makeText(this, "Update3", Toast.LENGTH_SHORT).show(); 
        if(resultCode == RESULT_OK){ 
         ContentValues cv = new ContentValues(); 
         cv.put("size",data.getStringExtra("return_type")); 
         db.update("dog",cv,"id=?",new String[]{"1"}); 
        } 
        break; 
       case 4: 

        if(resultCode == RESULT_OK){ 
         ContentValues cv = new ContentValues(); 
         cv.put("sex",data.getStringExtra("return_sex")); 
         Toast.makeText(this, data.getStringExtra("return_sex"), Toast.LENGTH_SHORT).show(); 
         int r = db.update("dog",cv,"id=?",new String[]{"1"}); 
         if(r != 1){ 
          Toast.makeText(this, "Update3", Toast.LENGTH_SHORT).show(); 
         } 
        } 
        break; 

      } 
      db.close(); 
      updateView(); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu){ 
      MenuInflater inflater = getMenuInflater(); 
      inflater.inflate(R.menu.add,menu); 
      return true; 
     } 
     @Override 
     public boolean onOptionsItem 

    Selected(MenuItem item){ 
      int id = item.getItemId(); 
      if(id == R.id.add){ 

      } 
      return super.onOptionsItemSelected(item); 
     } 
    } 
+0

Haben Sie versucht, Refresh-UI-Logik in der 'onResume()' Methode in Ihrer ersten Aktivität anzuwenden? – parohy

+0

Rufen Sie Ihre Methode zum Abrufen von Daten aus der Datenbank bei onResume() -Methode in Ihrer MainActivity.class –

+0

@parohy Meinst du runUIthread? – Ben

Antwort

1

Sie sollten die zweite Aktivität mit startActivityForResult(intent,requestCode) öffnen und dann können Sie onActivityResult(...) in der ersten implementieren, wo Sie die Daten von der DB wieder holen kann und die Ansichten aktualisieren.

+0

Eigentlich habe ich das in meiner zweiten Aktivität gemacht, um die Daten von der dritten Aktivität zu bekommen, jetzt lade ich meinen Code hoch. Bitte schau es dir an – Ben