2016-08-08 3 views
0

私は3つのアクティビティを持っています。最初のアクティビティはデータベースの値を保持するために使用され、リストビューは2番目のアクティビティに表示されました。リストビューのアイテムをクリックすると、私が選択したアイテムを編集するには、データベースのデータを更新した後、新しいデータが2番目のアクティビティに表示されますが、最初のデータに戻ると、何も更新されませんでした。 ? 助けていただければ幸いです。androidデータベースを更新した後でメインアクティビティをリフレッシュするにはどうすればよいですか?

第2の活性コード:

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

最初のアクティビティで、更新ロジックを 'onResume()'メソッドに適用しようとしましたか? – parohy

+0

MainActivity.classのonResume()メソッドでデータベースからデータを取得する方法を呼び出す –

+0

@parohy runUIthreadを意味しますか? – Ben

答えて

1

あなたはstartActivityForResult(intent,requestCode)を有する第2の活動を開く必要があり、その後、あなたがもう一度DBからデータを取得し、ビューをリフレッシュすることができます最初のものでonActivityResult(...)を実装することができます。

+0

実際には、3回目のアクティビティからデータを取得するための2回目のアクティビティでこれを行いました。コードをアップロードします。確認してください – Ben

関連する問題