Android Studio findViewById在片段中看不到按钮

lc8prwob  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(167)

我有一个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);
    }

}
rggaifut

rggaifut1#

我认为问题在于您尝试从Activity xml访问Fragmen xml中包含的按钮示例。
要解决这个问题,你应该转到你的FragmentBasic,在onCreateView完成后(在onViewcreated内)找到按钮并执行你需要的操作。
要在片段和Activity之间进行通信,可以使用共享视图模型。
请参阅
https://developer.android.com/guide/fragments/communicate

相关问题