繁体   English   中英

onClickListener 在标签式活动 Android 中不起作用

[英]onClickListener doesnt work in Tabbed Activity Android

我在 onCreate 方法中编写的 setOnclick 侦听器不起作用。 该错误是按钮 b1 的空指针异常错误。 我试图在 onclick 方法之前初始化 b1 但它也不起作用。 对于此代码,我使用了 Android Studio 示例“TAbbed Activity”。 然后我正在寻找一种在选项卡式活动中使用 onClickListener 方法的方法。 请告诉我一些解决方案。 谢谢

public class MainActivity extends AppCompatActivity {

        public static Button b1,b2;
        private SectionsPagerAdapter mSectionsPagerAdapter;
        private ViewPager mViewPager;

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

            mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

            mViewPager = (ViewPager) findViewById(R.id.container);
            mViewPager.setAdapter(mSectionsPagerAdapter);


            //  THIS DOESNT RUN AND IT MAKES THE APP CRASH
            b1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    b1.setText("test");
                }
            });

        }

        public static class PlaceholderFragment extends Fragment {

            private static final String ARG_SECTION_NUMBER = "section_number";
            public PlaceholderFragment() {}

            public static PlaceholderFragment newInstance(int sectionNumber) {
                PlaceholderFragment fragment = new PlaceholderFragment();
                Bundle args = new Bundle();
                args.putInt(ARG_SECTION_NUMBER, sectionNumber);
                fragment.setArguments(args);
                return fragment;
            }

            public void newImageView(int sectionNumber, Button img, int n){
                if(sectionNumber == n)
                    img.setVisibility(View.VISIBLE);
                else
                    img.setVisibility(View.INVISIBLE);
            }

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);

                b1=(Button)rootView.findViewById(R.id.b1);
                newImageView(getArguments().getInt(ARG_SECTION_NUMBER),b1,1);

                b2=(Button) rootView.findViewById(R.id.b2);
                newImageView(getArguments().getInt(ARG_SECTION_NUMBER),b2,2);

                return rootView;
            }
        }

        public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

            @Override
            public Fragment getItem(int position) {
                return PlaceholderFragment.newInstance(position + 1);
            }

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

            @Override
            public CharSequence getPageTitle(int position) {
                switch (position) {
                    case 0:
                        return "SECTION 1";
                    case 1:
                        return "SECTION 2";
                }
                return null;
            }
        }
    }`enter code here

把这个放在设置 onClickListener 之前

b1=(Button)rootView.findViewById(R.id.b1);

或在分配 id 后设置侦听器。 在处理点击之前,您应该为按钮分配一个 id。 否则,android 应该如何找出 b1 是什么按钮。

该按钮可能是在你的片段的XML(R.layout.fragment_main),所以你应该补充的是onClickListener()onCreateView()您的PlaceholderFragmentb1=(Button)rootView.findViewById(R.id.b1); .

在任何情况下,您都不能在未首先定义的对象中定义 onClickListener()。 您首先必须通过b1=(Button)rootView.findViewById(R.id.b1);的 XML 中的 id 属性找到该视图b1=(Button)rootView.findViewById(R.id.b1); 或使用构造函数创建一个,例如。 b1= new Button(); (不适合您的情况)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM