【问题标题】:Interface Null object Reference Communicating to fragment by implementing interface in activity?接口空对象参考通过在活动中实现接口与片段通信?
【发布时间】:2019-11-07 10:30:15
【问题描述】:

尝试在空对象引用上调用接口方法。在 Activity 中声明接口并在 Fragment 中实现。当通过单击 Tab 调用实现的方法时产生错误。

活动

    private  HistoryListener listener;

    public interface HistoryListener{

        public void onSelect();
    }

Activity的TabselectedListener

    tabLayout.addOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    switch(tab.getPosition()) {
                        case 0:
                           break;
                        case 1:
                            break;
                        case 2:
                            Log.d("Tab", "onTabSelected: " +tab.getPosition());
                            listener.onSelect();
                            break;

                    }
                }

                @Override
                public void onTabUnselected(TabLayout.Tab tab) {

                }

                @Override
                public void onTabReselected(TabLayout.Tab tab) {

                }

片段

    class Fragment implements Activity. HistoryListener{

          @Override
            public void onSelect() {


            }

        }

【问题讨论】:

  • 从哪里初始化listener
  • @Md.Asaduzzaman 没找到你
  • 您在addOnTabSelectedListener 中使用listener.onSelect();。从哪里设置监听器的值?可能它是 null 这就是你得到异常的原因
  • 另外你在 ViewPager 中使用哪个适配器?请添加 ViewPager 和 Tab 设置代码。如果可能,那么适配器
  • @Md.Asaduzzaman 那么如何在活动中初始化界面

标签: android android-activity android-fragmentactivity android-tablayout


【解决方案1】:

您需要将监听器初始化为片段中的 onAttach(Context context) 方法

 @Override
    public void onAttach(Context context) {
        super.onAttach(activity);
       try{
      listener = (HistoryListener) context;
          } catch(Exception e){
               throw new ClassCastException(context.toString()
                    + " must implemenet HistoryListener.onSelect()");
          }

        } 
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多