2013-10-11 51 views
2

我已經閱讀了很多關於同一個問題的答案,但我仍然不明白爲什麼我的代碼無法正常工作。我有一個問題(我認爲)在兩個活動之間交換數據。 我有2個活動 - 第一個包含ListView和一個添加按鈕。既沒有onActivityResult()也沒有notifyDataSetChanged()工作

當用戶按下添加新的活動開始填寫表格。當用戶完成表格時,他/她按OK鍵,我的第一個活動再次開始(它確實是這樣),它應該包含新項目(但它不包含)。

這是我的第一個活動:

public class DatabaseActivity extends Activity implements OnClickListener { 

    ArrayList<Student> students; 
    StudentDatabaseAdapter adapter; 
    ListView lvStudentList; 

    ImageButton imgBtnAdd; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.database); 

     students = new ArrayList<Student>(); 
     fillArrayList(); 

     adapter = new StudentDatabaseAdapter(this, students); 
     lvStudentList = (ListView)findViewById(R.id.lvStudentsList); 
     lvStudentList.setAdapter(adapter); 

     imgBtnAdd = (ImageButton)findViewById(R.id.imagBtnAddStudent); 

     imgBtnAdd.setOnClickListener(this); 

    } 


    public void fillArrayList() { 
     //code here  
    } 

    @Override 
    public void onClick(View v) { 
     Intent intent; 
     intent = new Intent(this, WizardActivity.class); 
     startActivity(intent); 
    } 

    public void addStudent(Student student) { 
     students.add(student); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     if(resultCode==RESULT_OK) 
     { 
      if(requestCode==2) 
      { 
       if (intent == null) {return;} 
       Student newStudent = new Student(intent.getStringExtra("name"), intent.getStringExtra("surname"), 
         intent.getStringExtra("last_name"), Integer.parseInt(intent.getStringExtra("year_of_birth")), R.drawable.default_ava); 
       addStudent(newStudent); 
       adapter.notifyDataSetChanged(); 
      } 
     } 
    } 
} 

這就是我的第二個活動:

public class WizardActivity extends Activity implements OnClickListener { 

    EditText etName, etSurname, etLastName, etYearOfBirth; 

    ImageButton imgBtnOK; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.wizard);  

     etName = (EditText)findViewById(R.id.etName); 
     //initializing other edit texts 

     imgBtnOK = (ImageButton)findViewById(R.id.imgBtnOK); 

     imgBtnOK.setOnClickListener(this);   
    } 

    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(this, DatabaseActivity.class); 

     intent.putExtra("name", etName.getText().toString()); 
     intent.putExtra("surname", etSurname.getText().toString()); 
     intent.putExtra("last_name", etLastName.getText().toString()); 
     intent.putExtra("year_of_birth", etYearOfBirth.getText().toString()); 
     setResult(RESULT_OK, intent); 


     startActivityForResult(intent, 2); 
    } 
} 

回答

2

沒有什麼不對您的notifyDataSetChanged()。您似乎錯過了輔助活動將結果傳回其調用者活動的方式。

  • DatabaseActivity.onClick()應該調用startActivityForResult()而不是startActivity()

  • WizardActivity.onClick()應該在setResult()之後撥打finish()(刪除startActivityForResult()調用,這在那裏沒有意義)。還要注意您提供給setResult()的意圖可以是一個空的意圖,即Intent intent = new Intent();

  • 次要活動完成後,DatabaseActivity將回到前景和結果將通過DatabaseActivity.onActivityResult()進行處理。

+0

非常感謝!它幫助! – Lanitka

0

我想你還沒有在WizardActivity

開始新的活動試試這個:

WizardActivity 


    ...... 
    @Override 
public void onClick(View v) { 
    Intent intent = new Intent(this, DatabaseActivity.class); 

     intent.putExtra("name", etName.getText().toString()); 
     intent.putExtra("surname", etSurname.getText().toString()); 
     intent.putExtra("last_name", etLastName.getText().toString()); 
     intent.putExtra("year_of_birth", etYearOfBirth.getText().toString()); 
     setResult(RESULT_OK, intent); 


    finish(); 

} 

DatabaseActivity 

add if you want 

@Override 
protected void onResume(){ 

...... 
adapter.notifyDataSetChanged(); 
} 
+0

我做了你的答案的第一部分,並改變了我的DataBaseActivity作爲Piovezan擁塞 - 它現在工作正常!謝謝) – Lanitka

+0

好吧,這很好,只需選擇問題解決 –

+0

你能告訴我在哪裏可以標記我的問題解決? – Lanitka