我在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
答案 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();
(在您的情况下不合适)。