我有一个TabLayout Activity,它包含3个片段,每个片段都有按钮。我尝试从该Activity的其中一个片段中获取按钮,但在空对象引用上收到错误“尝试调用虚拟方法'void android.widget.Button.setText(java.lang.CharSequence)'”。如何从TabLayout片段中获取按钮,并在单击时将其分配给change Activity?
我的TabLayout类:
public class SecondPage extends AppCompatActivity {
TabLayout tl;
ViewPager2 vp2;
PagerAdapter pa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second_page);
tl = findViewById(R.id.tab_layout_spage);
vp2 = findViewById(R.id.view_pager_spage);
pa = new PagerAdapter(this);
vp2.setAdapter(pa);
//there I try to get Button via Button b = findViewById(R.id.fbtn); and get an error
//fbtn is in the fragment Basic
tl.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
vp2.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
我的片段类:
public class Basic extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_basic, container, false);
}
}
1条答案
按热度按时间rggaifut1#
我认为问题在于您尝试从Activity xml访问Fragmen xml中包含的按钮示例。
要解决这个问题,你应该转到你的
FragmentBasic
,在onCreateView
完成后(在onViewcreated
内)找到按钮并执行你需要的操作。要在片段和Activity之间进行通信,可以使用共享视图模型。
请参阅
https://developer.android.com/guide/fragments/communicate