2010-12-03 2 views
3

텐트가. 이 활동에서이 목록에 뭔가를 추가하는 활동을 수행 할 수 있습니다 (활동 B).TabActivity 통과 엑스트라 내가 세 가지 활동을

활동 B - 이것은 웹 사이트에 데이터를 추가하는 활동입니다. 성공적으로 완료되면이 액티비티는 액티비티 A에게 해당 목록을 새로 고침해야한다고 지시해야합니다.

활동 T - 활동 A를 포함하는 TabHost

내 문제는 : 나는를 원하기 때문에,

활동 B는 새로 고침 활동에게 필요하지만 그 목적은 활동 T해야합니다

: TabHost 내가 중간으로 TabHost를 사용하고이 설정된 경우 너무처럼 활동 A를 통해 엑스트라를 전달할 수 있다고 생각

//ActivityB.class 
Intent myIntent = new Intent(v.getContext(), ActivityT.class); 
myIntent.putExtra("target", "ActivityA"); 
myIntent.putExtra("refreshData", true); 
startActivityForResult(myIntent, 0); 

활동 A를 표시

//ActivityT.class 
Bundle extras = getIntent().getExtras(); 

// Create an Intent to launch an Activity for the tab (to be reused) 
intent = new Intent().setClass(this, ActivityA.class); 

// Check to see if we want to pass our bundle through to the activity 
if (extras != null && extras.getString("target").equals("activityA")) { 
    intent.putExtras(extras); 
} 

// Initialize a TabSpec for each tab and add it to the TabHost 
spec = tabHost.newTabSpec("Tab1").setIndicator("Tab1", 
      res.getDrawable(R.drawable.ic_tab_tab1)).setContent(intent); 
tabHost.addTab(spec); 

다른 탭으로 탭을 변경하고 다시 변경하면 엑스트라가 다시 전달되고 또 다시 - 내 탭이 매번 데이터를 새로 고치게되는 것을 제외하면 위대한 기능을합니다. 더 이상 활동 B에서 오는 것이 아닙니다. 이는 TabActivity가 탭 변경시 다시 생성되지 않으므로 보조 항목이 항상 하위 의도로 전달되기 때문입니다.

그렇다면 활동 B에서만 활동 A를 새로 고칠 수 있지만 표시하려면 TabHost가 표시됩니다.

+0

브로드 캐스트를 사용하십시오. – Falmarri

+0

이렇게 작은 작업을하기 위해 방영되지 않는 것이 조금입니까? 그들은 일반적으로 다른 앱/서비스에 의해 방송 된 이벤트/의도를 듣는 데 일반적으로 사용되지 않습니까? –

답변

0

아마도 가장 우아한 해결책은 아니지만 ActivityB에서 설정할 수있는 ActivityA 클래스의 정적 데이터 멤버를 사용했습니다.

//ActivityA.class 

public static boolean refreshData = false; 

public void onResume() { 
    if (refreshData) { 
     mRefreshData(); 
     refreshData = false; 
    } 
} 

//ActivityB.class 

ActivityA.refreshData = true; 
Intent myIntent = new Intent(v.getContext(), ActivityT.class); 
startActivityForResult(myIntent, 0); 

이런 종류의 작업을 수행 할 수있는 더 좋은 방법이 있는지 알고 싶습니다.

0

나는이 문제를 해결하고 TabHost, TabActivity 및 TabWidget 코드를 복사하고이 문제를 해결하기 위해 필요에 맞게 사용자 정의하는 방법을 강요했다. 내가 자랑스러워하는 것이 아니라 트릭을했습니다.

다른 것들을하기 쉽도록하기 위해 몇 가지 사소한 조정이 있었기 때문에 다소 유용했습니다.

+1

브로드 캐스트를 사용하는 것보다 쉽습니다. – Falmarri

관련 문제