这是一个愚蠢的问题,但我如何重置另一个类的工具栏标题。不是来自MainActivity?
public class MainActivity extends AppCompatActivity {
public Toolbar toolbar;
toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.app_name);
我想从TabAdapter.class更改标题。我怎么能这样做?当我试图这样做时,我得到了一个nullpointerexception。
public class TabAdapter extends FragmentPagerAdapter{
MainActivity main = new MainActivity();
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return MainFragment.getInstance();
case 1:
main.toolbar.setTitle("hello world");
return SearchFragment.getInstance();
}
return null;
}
答案 0 :(得分:0)
在onResume()的SearchFragment中,使用getActivity()设置标题:
public void onResume(){
super.onResume();
((Toolbar) this.getActivity().findViewById(R.id.toolbar))
.setTitle("hello world");
}
答案 1 :(得分:0)
通过MainActivity main = new MainActivity();
这一行,您创建了一个新的活动对象,无法用于更新当前活动。
所以
您可以通过将当前活动引用传递给适配器来设置工具栏标题。 创建adpater后,调用mathod来设置活动引用,并按以下方式执行此操作。
public class TabAdapter extends FragmentPagerAdapter {
private AppCompatActivity activity;
public void setActivity(AppCompatActivity activity) {
this.activity = activity;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
//here you can change title of toolbar
return MainFragment.getInstance();
case 1:
//main.toolbar.setTitle("hello world");
updateToolbarTitle("Hello World");
return SearchFragment.getInstance();
}
return null;
private void updateToolbarTitle(String title) {
activity.getSupportActionBar().setTitle(title);
}
}
}
并在MainActivity
中将活动的引用传递给适配器,如下所示
TabAdapter adapter = new TabAdapter(/*Your params here*/);
adapter.setActivity(this);
答案 2 :(得分:0)
您不应该尝试在MainActivity
课程中初始化TabAdapter
。
您应该从片段访问工具栏并在那里进行更改。这是一个例子:
public class MainActivity extends Activity {
private Toolbar mToolbar;
public Toolbar getToolbar() {
return mToolbar;
}
public void onCreate(Bundle savedInstanceState) {
// initialisation logic
mToolbar = ... // get toolbar from layout
}
}
public class SomeFragment extends Fragment {
public void onResume() {
// get the hosting activity
final MainActivity activity = (MainActivity) getActivity();
// get it's toolbar
final Toolbar toolbar = activity.getToolbar();
// set the title
toolbar.setTitle("My Title");
}
}
答案 3 :(得分:0)
更好地使用它。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(getSupportActionBar() != null){
getSupportActionBar().setTitle(mAdapter.getPageTitle(position));
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
在你的FragmentPagerAdapter
中 @Override
public CharSequence getPageTitle(int position) {
return title; //title for that position
}