본문 바로가기

Android

[BroadCast/BroadCastReceiver/Action]

반응형

* ListActivity 내  Adapter 를 다른 Activity에서 접근하지 못하는 문제.

 

해결 방법 : BroadcastReceiver 이용. Action을 주어 send 하면 리시버에서 받아서 액션 수행

 

1. 타 액티비티

 

Button btnSave = (Button) addDial.findViewById(R.id.add_ok);
    btnSave.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
      // TODO Auto-generated method stub
      String wordData = wordInput.getText().toString();
      String wordmeanData = wordmeanInput.getText().toString();
      String wordSetDate = getDate();
      
      WordSmart wordInfo = new WordSmart();
      if ((wordData != null) || (wordmeanData != null)) {
       if (wordData != null) {

        wordInfo.setWord(wordData);

       }
       if (wordmeanData != null) {

        wordInfo.setMeaning(wordmeanData);
       }
       wordInfo.setRegdate(wordSetDate);
       DBManager.getInstance(getApplicationContext()).saveWordSmart(wordInfo);
      }
      addDial.dismiss();
      sendBroadcast(new Intent(Constants.ACTION_ADD_WORDS));
     }

    });

 

2. 리스트 액티비티에서 받을 시

 

public class WordSmartActivity extends ListActivity {


 /** tab 액티비티에서 저장한 액션을 받아 리스트를 업데이트 하기 위한 브로드캐스트 */
 BroadcastReceiver br;

 

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.i(TAG, "onCreate!!");

 

.....................

}

 

public void setBroadCastReceiver(){
  /* 탭액티비티상에서 단어장에 단어를 저장 했을때 리스트를 업데이트 하기 위해 브로드 캐스트 사용. */
  br = new BroadcastReceiver() {
   @Override
   public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    /* 단어 추가 액션 */
    if(Constants.ACTION_ADD_WORDS.equals(action)){
     Log.i(TAG,"update word list");
     
     ArrayList<WordSmart> m_orders = DBManager.getInstance(getApplicationContext()).getWordSmartList();
//     DBManager.getInstance(getApplicationContext());
     if(m_adapter!=null){
      m_adapter.clear();
      m_adapter = null;
     }
     if(m_adapter==null){
      m_adapter = new setWordListAdapter(WordSmartActivity.this, R.layout.word_row, m_orders);
//      m_adapter.notifyDataSetChanged();
//      setListAdapter(m_adapter);
      wordlist.setAdapter(m_adapter);
      
      wordlist.setSelection(m_orders.size()-1);

     }
    }

반응형