【问题标题】:Fragment(tab) code starts working without selecting tab片段(选项卡)代码无需选择选项卡即可开始工作
【发布时间】:2018-02-13 16:06:34
【问题描述】:

Tab3 代码在不使用选项卡选择的情况下开始工作。当我启动 MainActivity 时,所有选项卡代码都在同时工作。当用户选择选项卡时如何使它们工作 我猜 onCreateView 是错误的。我尝试使用其他方法,但在切换到选项卡之前它们都被触发了。 谢谢

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    private SectionsPageAdapter mSectionsPageAdapter;

    private ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: Starting.");

        mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        setupViewPager(mViewPager);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(mViewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
        adapter.addFragment(new tab1_fragment(), "TAB1");
        adapter.addFragment(new tab2_fragment(), "TAB2");
        adapter.addFragment(new tab3_fragment(), "TAB3");
        viewPager.setAdapter(adapter);
    }


}

SectionsPageAdapter.java

public class SectionsPageAdapter extends FragmentPagerAdapter {

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

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

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

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

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

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

Tab3:

public class tab3_fragment extends Fragment {
    private static final String TAG = "Tab3Fragment";

    private Button btnTEST;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab3_fragment,container,false);
        btnTEST = (Button) view.findViewById(R.id.btnTEST3);

        btnTEST.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getActivity(), "TESTING BUTTON CLICK 3",Toast.LENGTH_SHORT).show();
            }
        });

        //This is called when i launch mainactivty as intent but i want to make this work when user selects tab 3

        Toast.makeText(getActivity(), "tab 3 selected",Toast.LENGTH_SHORT).show();


        return view;
    }
}

【问题讨论】:

    标签: android android-fragments tabs


    【解决方案1】:

    在你的片段中重写 setUserVisibleHint(),这个方法只会在片段对用户可见时调用。

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
      if(isVisibleToUser)
        {
    Toast.makeText(getActivity(), "tab 3 selected",Toast.LENGTH_SHORT).show();
       }
    }
    

    【讨论】:

    • java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'android.content.res.Resources android.content.Context.getResources()' 我收到此错误
    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多