onClickListener在Tabbed Activity Android中不起作用

时间:2016-03-24 13:56:49

标签: android tabbed

我在onCreate方法中编写的setOnclick Listener不起作用。   该错误是按钮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

2 个答案:

答案 0 :(得分:0)

在设置onClickListener

之前设置此项
b1=(Button)rootView.findViewById(R.id.b1);

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

答案 1 :(得分:0)

该按钮可能位于您的片段的XML(R.layout.fragment_main)中,因此您应该在onClickListener()之后的onCreateView() PlaceholderFragment中添加b1=(Button)rootView.findViewById(R.id.b1);。 / p>

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