2013-01-08 61 views
0

我有一個應用程序5活動。所有這些活動的設置都可以使用菜單按鈕(選項菜單)並選擇「設置」進行修改。這將打開一個對話框,其中顯示所有設置和修改可能。更新活動後使用optionsMenu

當我通過按下「確定」按鈕關閉此設置對話框時,我想要調用optionsmenu的活動更新其視圖。

的optionsmenu是活化狀態像這樣在所有活動:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.firstactivity_options_menu, menu);  
    return true; 
} 

,並遵循onOptionsItemSelected的例子...

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.settings) { 
     class.settingsDialog(this);   
    } else if (item.getItemId() == R.id.about) { 
     try { 
      alertDialog(getResources().getString(R.string.settings_about), getAssets().open("about"), this); 
     } catch (IOException e) { 
     } 
    } 
    return true; 
} 

我的問題是更新我有一個後一個活動視圖匹配R.id.settings。這可能嗎?如果是的話,請給我一些指點...

回答

0

很可能有不同的方法來做到這一點,但點擊後Ok你可以使用一個Intent啓動活動,並呼籲finish()上的活動重新創建視圖

0

由於對話框不會強制調用Activity的onResume()方法,因此我會實現超類/子類方法或接口。

製作一個頂級抽象活動類,例如SuperMainActivity

public abstract class SuperMainActivity extends Activity 
{ 
    public abstract void updateUI(); 
} 

然後,讓您的每一個活動的延伸SuperMainActivity,而不是僅僅Activity並實現updateUI()方法。

然後在您的settingsDialog()方法,使它可以:

接受SuperMainActivity PARAM而不是活動/語境PARAM。

或:

做鑄造時要回調,如

((SuperMainActivity)myVariable).updateUI(); 

接口在很大程度上是相似的:

public interface ActivityCallback 
{ 
    public void updateUI(); 
} 

而且每次活動將實施 ActivityCallback

這樣的一個小號

public class MainActivity implements ActivityCallback 
{ 
    public void updateUI() 
    { 
    //implementation. Differs per class 
    } 
} 

話又說回來,你settingsDialog()方法應該在ActivityCallback參數接受,否則將再次施放。

請注意,如果你決定在這個方法中,當你調用settingsDialog()你仍然可以用

settingsDialog(this); 

叫它由於您的活動將滿足一個參數的要求。