【问题标题】:How to access Views again after onCreateView in Fragment?如何在 Fragment 中的 onCreateView 之后再次访问 Views?
【发布时间】:2014-11-24 05:29:18
【问题描述】:

实际上,我正在使用 Fragment 和 FragmentPagerAdapter,但是当我尝试再次访问片段中的视图时,我遇到了 null 的问题。 pageNum 也为空。我尝试了很多方法来解决这个问题,但都没有成功。

FirstFragment.java

public class FirstFragment extends Fragment{
    private int pageNum;
    private TextView titleTxt;
    private LinearLayout topPan;

    public static FirstFragment newInstance(int page) {
        FirstFragment fragment = new FirstFragment();
        Bundle args = new Bundle();
        args.putInt("page", page);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        pageNum = getArguments().getInt("page", 0);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.workflow_item_layout, container, false);
        titleTxt = (TextView)    view.findViewById(R.id.title);
        topPan   = (FrameLayout) view.findViewById(R.id.top_pan);
    }

    public void setTopPanVisible(boolean isVisible) {
        topPan.setVisibility(isVisible);
    }

pageChangeListener 代码

private ViewPager.OnPageChangeListener pageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            final int position = pager.getCurrentItem();

            if (state == ViewPager.SCROLL_STATE_IDLE) {
                final FirstFragment fragment = (FirstFragment) adapter.getItem(position);
                fragment.setTopPanVisible(true);

当我在 pageChangeListener 中调用“setTopPanVisible”时,topPan 为空。视图如何保持活力以具有价值?

【问题讨论】:

    标签: android android-fragments fragment fragmentpageradapter


    【解决方案1】:

    如果您遇到空指针异常,则意味着以下两种情况之一:

    1. 您在调用片段的onCreateView() 方法之前调用了setTopPanVisible()
    2. 或者你view.findViewById(R.id.top_pan);

    为了解决这个问题,你应该弄清楚你所面临的这些问题中的哪一个。

    【讨论】:

    • 我想在制作片段后改变 topPan 的可见性,所以我需要在 onCreateView 调用之后调用 setTopPanVisible。
    • 您面临哪一个问题。 #1 还是 #2?
    • 正是#1,我正在寻找并尝试。
    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 2020-03-03
    • 2021-01-25
    • 1970-01-01
    • 2014-01-06
    • 2021-08-13
    • 2018-12-02
    • 2016-12-18
    相关资源
    最近更新 更多