gpt4 book ai didi

java - 无法在 ViewPager 中编辑 Fragment 中的 ActionBar 标题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:01 25 4
gpt4 key购买 nike

我有一个 Activity,它通过 ViewPager 托管多个 fragment 。在 Activity 的 onCreate 方法中,我使用以下代码更改 ActionBar 标题:

    Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(getSupportActionBar() != null) {
getSupportActionBar().setTitle(getResources().getString(R.string.custom_title));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

它工作正常,但一旦 Fragment 变得可见,我就无法更改它。为了检测它,我实现了:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

if (isVisibleToUser && getContext() != null) {
((MainActivity) getContext()).editActionBarTitle("new title");
}
}

下面是 editActionBarTitle 的定义:

public void editActionBarTitle(String title) {
if(getSupportActionBar() != null) {
getSupportActionBar().setTitle(title);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}

我可以看到该方法在 fragment 变得可见时立即被调用,但它对 ActionBar 的标题没有影响。为了正确编辑标题,我缺少什么?


编辑

我还尝试在 viewPager 中实现 addOnPageChangeListener,我可以看到 onPageSelected 方法被调用,但它对标题,这是 MainActivity 上的示例:

public class MainActivity extends BaseActivity {   

private NoScrollViewPager mViewPager;
private SectionsPagerAdapter mAdapter;

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

// Toolbar initialization
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(getSupportActionBar() != null) {
getSupportActionBar().setTitle("MainActivity");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

// ViewPager initialization
mViewPager = findViewById(R.id.containter);
setupViewPager();
}

private void setupViewPager() {

mAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

mAdapter.addFragment(new Fragment1(), "Fragment 1");
mAdapter.addFragment(new Fragment2(), "Fragment 2");
mAdapter.addFragment(new Fragment3(), "Fragment 3");

mViewPager.setOffscreenPageLimit(mAdapter.getCount());
mViewPager.setAdapter(mAdapter);

// viewPager event listener
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

@Override
public void onPageSelected(int position) {
setTitle("fragment " + position);
if(getSupportActionBar() != null) {
getSupportActionBar().setTitle("fragment " + position);
}
}

@Override
public void onPageScrollStateChanged(int state) { }
});
}

public void setViewPager(int position) { mViewPager.setCurrentItem(position); }
}

这是自定义的 ViewPager 类:

public class NoScrollViewPager extends ViewPager {

// Disable horizontal scrolling in ViewPager
private boolean isPagingEnabled = false;

public NoScrollViewPager(Context context) {
super(context);
}

public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
@SuppressLint("AndroidLintClickableViewAccessibility")
public boolean onTouchEvent(MotionEvent event) {
return this.isPagingEnabled && super.onTouchEvent(event);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return this.isPagingEnabled && super.onInterceptTouchEvent(event);
}

public void setPagingEnabled(boolean b) {
this.isPagingEnabled = b;
}
}

这是自定义适配器类:

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

private FragmentManager fragmentManager;

public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
fragmentManager = fm;
}

public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}

@Override
public Fragment getItem(int position) { return mFragmentList.get(position); }

@Override
public int getCount() { return mFragmentList.size(); }

@Override
public int getItemPosition(Object object) { return POSITION_NONE; }

}

最佳答案

在你的 onCreateView 方法中试试这个到 fragment 中。也许它会对你有所帮助。

if(getActivity() != null){
getActivity().setTitle("Your title");
}

如果您在 fragment 中使用了 ViewPager,那么您可以使用

@Override
public void setUserVisibleHint(boolean isVisible) {
super.setUserVisibleHint(isVisible);

if (isVisible) {
if(getActivity() != null){
getActivity().setTitle("Your title");
}
}
}

关于java - 无法在 ViewPager 中编辑 Fragment 中的 ActionBar 标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com