2013-04-13 58 views
0

我有一個類,獲取actionbarsherlock oncreate並設置默認值。我如何從另一個班級更改此值?這不工作更改getSupportActionBar()。setTitle值從另一個類

樣本代碼:

public class MyActivity extends SlidingFragmentActivity { 
public static String abs; 

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

     abs = "text"; 
     getSupportActionBar().setTitle(abs); 
} 
} 

外部類:

MyActivity.abs = "new value"; 

回答

2

這絕對不是設置標題推薦的方式,但是,如果您刪除分配abs = "text";它應該工作...

public class MyActivity extends SlidingFragmentActivity { 
    public static String abs; 

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

     getSupportActionBar().setTitle(abs); 
    } 
} 

...和請撥打MyActivity.abs = "new value";一些之前活動創建的第一次。

無論如何,我會建議通過標題作爲一個額外的進入活動...

Intent intent = new Intent(context, MyActivity.class); 
intent.putExtra("title", "Another Headline"); 
context.startActivity(intent); 

...和評估一個從意圖:

public class MyActivity extends SlidingFragmentActivity { 

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

     Bundle extras = getIntent().getExtras(); 
     String title = "Default Headline"; 
     if (extras != null && extras.containsKey("title")) {  
      title = intent.getStringExtra("title"); 
     } 

     getSupportActionBar().setTitle(title); 
    } 
} 

附:創建後設置標題:

如果你可以直接引用的活動,比如因爲你在一個片段,您可以添加一個方法,像...

public class MyActivity extends SlidingFragmentActivity { 

    public void setTitle(String title) { 
     this.getSupportActionBar().setTitle(title); 
    } 

    .... 
} 

...並相應地把它:

getActivity().setTitle("Another Headline"); 

最複雜的方式來傳遞任何類型的參數,以現有的活動,讓他們來處理它們以任何方式將使用一個BroadcastReceiver:

public abstract class MyActivity extends SlidingFragmentActivity { 

    public static final String SET_TITLE_ACTION = "com.myapp.SET_TITLE_ACTION"; 
    public static final IntentFilter INTENT_FILTER = createIntentFilter(); 

    private SetTitleReceiver setTitleReceiver = new SetTitleReceiver(); 

    private static IntentFilter createIntentFilter() { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(SET_TITLE_ACTION); 
     return filter; 
    } 

    protected void registerSetTitleReceiver() { 
     registerReceiver(setTitleReceiver, INTENT_FILTER); 
    } 

    protected void unRegisterSetTitleReceiver() { 
     unregisterReceiver(setTitleReceiver); 
    } 

    public class SetTitleReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(SET_TITLE_ACTION)) { 
       Bundle extras = intent.getExtras(); 
       if (extras != null && extras.containsKey("title")) {  
        title = intent.getStringExtra("title"); 
        this.getSupportActionBar().setTitle(title); 
       } 
      } 
     } 
    } 
} 

任何Activity類應該能夠收到標題變化在onResume()註冊BroadcasdtReceiveronPause()註銷它。這樣,您就可以通過從任何地方發送廣播事件設置這些活動實例的標題:

Intent intent = new Intent(MyActivity.SET_TITLE_ACTION); 
intent.putExtra("title", "Another Headline"); 
context.sendBroadcast(intent); 

希望這有助於...乾杯!

+0

感謝您的幫助。第一次創建活動後,我必須設置標題。我需要動態地使用settext:我的意思是隻有settext值必須改變,頁面不會改變/刷新。當我使用intent時,主頁將會改變/刷新我想,不是嗎? – metemet06

+0

請參閱上文:如果您可以獲得有關所創建活動的參考信息,則最簡單的解決方案將適用。您可以在活動的onCreate()中分配這樣的引用(可以將其提供給適當的觀察者,或者簡單地使用靜態列表)。使用'BroadcastReceiver'是最靈活的方式,至少從某個角度來看 – Trinimon

+0

感謝您的幫助 – metemet06

1

它不工作,因爲你只是改變abs所指向的參考。 如果您想更改標題,請將SherlockActivity作爲參數傳遞給您的方法。

例子:

public class MyActivity extends SherlockActivity { 

@Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     new ChangeTitle(this).setTitle("test title"); 
    } 
} 

class ChangeTitle { 
    String title; 
    SherlockActivity activity; 

    public ChangeTitle(SherlockActivity activity) { 
     this.activity = activity; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
     activity.getSupportActionBar().setTitle(this.title); 
    } 
} 
+0

是MyActivity類的ChangeTitle內部類嗎?我需要使用MyActivity作爲主要活動併爲其設置默認值。然後,類External(在另一個java文件中)將動態地更改其值。我對有關如何使用它們的代碼有點困惑。 – metemet06

+0

它不一定是MyActivity的內部類。它只需要參考SherlockActivity。 – alex