2016-05-26 11 views
2

私はスライディングタブアクティビティを作成しましたが、私は動的にアプリケーションバーのタイトルを変更しようとしています。しかし、これまで何をしてもうまくいかないようです。ここに私のMainActivity.javaは次のとおりです。setTitle not working Android

public class MainActivity extends AppCompatActivity { 


ViewPager mPager; 
SlidingTabLayout mTabs; 

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


    getSupportActionBar().setDisplayShowHomeEnabled(true); 


    mPager = (ViewPager) findViewById(R.id.pager); 

    mPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); 

    mTabs = (SlidingTabLayout) findViewById(R.id.tabs); 

    mTabs.setCustomTabView(R.layout.custom_tab_view, R.id.tabText); 

    mTabs.setDistributeEvenly(true); 

    mTabs.setSelectedIndicatorColors(getResources().getColor(R.color.colorAccent)); 
    mTabs.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 

    mTabs.setViewPager(mPager); 

} 

class MyPagerAdapter extends FragmentPagerAdapter { 

    int tabIcons[] = {R.drawable.ic_events, R.drawable.ic_clients, R.drawable.ic_history}; 
    String[] tabText = getResources().getStringArray(R.array.tabs); 

    public MyPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position){ 
      case 0: 
       getSupportActionBar().setTitle("Events"); 
       EventsFragment eventsFragment = EventsFragment.getInstance(position); 
       return eventsFragment; 

      case 1: 
       getSupportActionBar().setTitle("Clients"); 
       ClientsFragment clientsFragment = ClientsFragment.getInstance(position); 
       return clientsFragment; 

      case 2: 
       getSupportActionBar().setTitle("History"); 
       HistoryFragment historyFragment = HistoryFragment.getInstance(position); 
       return historyFragment; 

      default: 
       getSupportActionBar().setTitle("Events"); 
       EventsFragment defaultFragment = EventsFragment.getInstance(position); 
       return defaultFragment; 

     } 

    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     Drawable drawable = getResources().getDrawable(tabIcons[position]); 

     drawable.setBounds(0,0,64,64); 

     ImageSpan imageSpan = new ImageSpan(drawable); 

     SpannableString spannableString = new SpannableString(" "); 

     spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

     return spannableString; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

}

私も使ってonCreate方法でアプリバーのタイトルを設定しようとしています

のいずれかに動作しません
getSupportActionBar().setTitle("Test"); 

を。

どうすればこの問題を解決できますか?ありがとう!ここ

+0

注:戻る矢印を設定するなど、アクションバーで何かをしようとすると、いつでも:getSupportActionBar.setDisplayHomeAsUpEnabled(true);何も起こっていないようです。 –

答えて

2

コールのsetTitle方法。

MainActivityからの呼び出し:ちょうどsetTitle(...)。異なるクラス(MyPagerAdapter)から呼び出す:activity.setTitle(...)

活性MainActivityオブジェクトへの参照です。 getActivity()を使用すると、フラグメントに関連付けられたアクティビティが返されます。

結論として、フラグメント内からタイトルを設定するには、getActivity().setTitle(...);を使用します。

+0

それは動作します、ありがとう! –

1

は私のプロジェクトの1からのコードです:

ActionBar actionBar = ((AboutActivity)context).getSupportActionBar(); 
actionBar.setCustomView(R.layout.action_bar_title_layout); 
LinearLayout layout = (LinearLayout) actionBar.getCustomView(); 
TextView titleTextView = (TextView) layout.findViewById(R.id.page_title_layout); 
titleTextView.setText("Your title"); 
titleTextView.setTypeface(Constants.TYPE_FACE_FONT_MEDIUM); // here you can customise your font 
actionBar.setDisplayShowCustomEnabled(true); 
actionBar.setDisplayShowTitleEnabled(false); 

action_bar_title_layout:MainActivityオブジェクト上

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:id="@+id/page_title_layout" 
     android:layout_width="wrap_content" 
     android:singleLine="true" 
     android:textSize="20dp" 
     android:textColor="@color/primary_ultralight" 
     android:text="Title" 
     android:alpha="0.9" 
     android:layout_height="wrap_content" /> 
</LinearLayout>