현재 만들고 있는 어플의 구조는 다음과 같습니다.

먼저 메인 액티비티가 있고...여기에 ViewPager를 만들어두고 ViewPager에서는 페이지가 바뀌면 각 페이지의 클래스를 호출하여 그곳에서 레이아웃의 내용을 초기화 합니다. 아래와 같은 형태로...

 		public Object instantiateItem(View pager, int position) {
				mView = null;
				mView = (View)mInflater.inflate(mLayoutId[position], null);
				switch(position){
				case 0:
					m_obj = (m1Food)new m1Food(mView,mContext);
					((m1Food) m_obj).Init();
					break;
				case 1:
					//m_obj = (m2Bus)new m1Bus(mView);
					//((m2Bus) m_obj).Init();
					break;
				case 2:
					m_obj=(m3TimeTable) new m3TimeTable(mView,mContext);
					((m3TimeTable) m_obj).init();
					break;
				}
			((ViewPager)pager).addView(mView, position, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT ));		//뷰 페이저에 추가
			return mView; 
		}


그리고 현재 제작중인 기능은 시간표쪽 뷰에서 그리드뷰의 특정 칸을 누르면 팝업메뉴가 뜨고 거기서 추가를 누를시 따로 입력 다이얼로그가 뜨면서 거기에서 입력을 끝냈을시 빠져나오면서 값을 가지고 나오는건데..

이게 액티비티<->액티비티의 경우 startActivityForResult를 사용하면 되는데..

클래스 <->액티비티의 구조에선 startActivityForResult가 사용이 안되더라구요.

현재 문제가 되는 부분입니다.

 		    //Set listener for action item clicked
			quickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {			
				@Override
				public void onItemClick(QuickAction source, int pos, int actionId) {				
					ActionItem actionItem = quickAction.getActionItem(pos);
		             
					//here we can filter which action item was clicked with pos or actionId parameter
					if (actionId == ID_ADD) {
						Intent intent = new Intent(m_Context, TableDialog.class);
						m_Context.startActivity(intent);
						strName = intent.getStringExtra("data_name"); // 과목명 스트링에 입력된 과목명 저장
				       		strProfesser = intent.getStringExtra("data_professer"); // 교수명 스트링에 입력된 교수명 저장
				       		strRoom = intent.getStringExtra("data_room");// 강의메모 스트링에 입력된 강의메모 저장
					}
			};


저기 strName,Professer,Room 부분이 값을 다시 전달받을 부분인데..임시로 저렇게 해뒀습니다.


저 데이터들은 차후

 	 	/**
	 	 * db에 값을 쓰기전에 변수들을 설정하고 row에 값을 넣는 함수
	 	 * @param position
	 	 * @param flag
	 	 */
	public void updateView(int position,int flag)
	{
        row = new ContentValues();
        row.put("datapos", position);    // db에 포지션 삽입
        row.put("name", strName);    // db에 과목명 삽입             
        row.put("professor", strProfesser);   // db에 교수명 삽입 
        row.put("room", strRoom);    // db에 강의메모 삽입
		switch(flag){
		case 0: //Update 모드일때...
			 m_sql.Open();
	         cursor = m_sql.select("*", "timetable");
	         m_sql.update("timetable", row, "datapos="+position);
             break;
		case 1: //insert 모드일때...
               m_sql.Open();
	           cursor = m_sql.select("*", "timetable");
	           cursor.moveToFirst();
	            
	           while(position != cursor.getInt(0))
	              {
	               cursor.moveToNext();
	              }
            m_sql.insert("timetable",row);
            break;
		}
        data_list.add(position, data_add(strName,strProfesser,strRoom));       // 시간표에 입력받은 과목명 표시
        m_Adapter.notifyDataSetChanged();    // 시간표 갱신       
        cursor.close();
        m_sql.Close();
	}


이곳에서 활용됩니다.



해결방법:

먼저 브로드캐스트리시버를 상속받은 커스텀 리시버를 생성합니다.이건 값을 활용할곳에 인라인으로 선언합니다.

 		public class Receiver extends BroadcastReceiver {
				 @Override
		 		  public void onReceive(Context context, Intent intent) {
		 		   // TODO Auto-generated method stub
							strName = intent.getStringExtra("data_name"); // 과목명 스트링에 입력된 과목명 저장
					       	strProfesser = intent.getStringExtra("data_professer"); // 교수명 스트링에 입력된 교수명 저장
					       	strRoom = intent.getStringExtra("data_room");// 강의메모 스트링에 입력된 강의메모 저장
					       	m_msg.DebugLog("name", intent.getStringExtra("data_name"));
					       	m_msg.DebugLog("professer", intent.getStringExtra("data_professer"));
					       	m_msg.DebugLog("room", intent.getStringExtra("data_room"));								       	
					       	updateView(idx,INSERT);
				 }
		 	}


아래와 같이 커스텀 리시버를 선언후 IntentFilter를 만들어서 그곳에 필터할 값을 addAction을 이용해 등록하고 리시버를 등록합니다.

그리고 액티비티를 실행합니다.

 					if (actionId == ID_ADD) {
						Receiver r=new Receiver();
						IntentFilter filter=new IntentFilter();
						Intent intent = new Intent(m_Context, TableDialog.class);
						filter.addAction("TableAdd");
						m_act.registerReceiver(r, filter);
						m_act.startActivity(intent);
					}



값을 전달할곳에선 아래와 같이 Intent를 생성후 전해줄 값을 넣고 setAction에 위에 정해둔 액션을 넣습니다.

그리고 sendBroadcast를 하면 액티비티<->클래스가 가능합니다.

         			Intent intent = new Intent();
        			intent.putExtra("data_name",m_name.getText().toString());
        			intent.putExtra("data_professer", m_professer.getText().toString());
        			intent.putExtra("data_room", m_room.getText().toString());
        			m_msg.DebugLog("sendready", "send!");
        	        intent.setAction("TableAdd");
        	        sendBroadcast(intent); // 추가 정보를 넣은 후 다시 인텐트를 반환합니다.