簡體   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