【问题标题】:Custom view inner interface throwing exception自定义视图内界面抛出异常
【发布时间】:2015-06-24 15:14:25
【问题描述】:

我有一个自定义视图,如下所示,它有一个内部界面来处理按钮点击。

  public class SavedContentCardView extends RelativeLayout {

        SavedItem[] mItems;
        TextView mHeader;
        Button mMoreButton;
        TextView mEmptyView;
        LinearLayout mContainer;
        OnMoreButtonClickListener mListener;

        public SavedContentCardView(Context context) {
            super(context);
            initialize(context, null, 0);

        }

        public SavedContentCardView(Context context, AttributeSet set) {
            super(context, set, 0);
            initialize(context, null, 0);
        }

        public SavedContentCardView(Context context, AttributeSet set, int defStyle) {
            super(context, set, defStyle);
            initialize(context, null, 0);
        }

        private void initialize(Context context, AttributeSet set, int deftStyle) {
            inflate(context, R.layout.saved_content_card_layout, this);
            mHeader = (TextView) findViewById(R.id.headerTitle);
            mMoreButton = (Button) findViewById(R.id.moreButton);
            mEmptyView = (TextView) findViewById(R.id.emptyView);
            mContainer = (LinearLayout) findViewById(R.id.main_container);
            mMoreButton.setOnClickListener(v -> {
                if (mListener != null) {
                    mListener.onMoreClicked();
                }
            });
    }

        public void loadItems(List<SavedItem> items) {

            if (items == null || items.size() == 0) {
                mEmptyView.setVisibility(VISIBLE);
                mContainer.setVisibility(GONE);
                mHeader.setVisibility(GONE);
                mMoreButton.setVisibility(GONE);

            } else {
                for (SavedItem item : items) {
                    SavedContentRowView card = new SavedContentRowView(item, mContainer.getContext());

                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                            ViewGroup.LayoutParams.MATCH_PARENT,
                            ViewGroup.LayoutParams.WRAP_CONTENT);
                    params.setMargins(0, 0, 0, 20);

                    mContainer.addView(card, mContainer.getChildCount(), params);
                }
                mEmptyView.setVisibility(GONE);
                mContainer.setVisibility(VISIBLE);
                mHeader.setVisibility(VISIBLE);
                mMoreButton.setVisibility(VISIBLE);
            }

        }

        public OnMoreButtonClickListener getMoreClickListener() {
            return mListener;
        }

        public void setMoreClickListener(
                OnMoreButtonClickListener listener) {
            mListener = listener;
        }

        public  interface OnMoreButtonClickListener {
            void onMoreClicked();
        }

    }

在片段中实现

public class HomeFragment extends BaseFragment<SavedContentPresenter> implements SavedContentView,SavedContentCardView.OnMoreButtonClickListener{

    @InjectView(R.id.savedContentCard) SavedContentCardView savedContentCard;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = View.inflate(getActivity(), R.layout.fragment_home, null);
        ButterKnife.inject(this, view);
        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        searchSrcText.setFocusable(false);
        searchSrcText.setSelected(false);
        savedContentCard.setMoreClickListener(this);
    }

    @Override
    public void onMoreClicked() {
        //TODO
    }
}

在尝试在活动或片段中实现 OnMoreButtonClickListener 时,我收到以下异常

   java.lang.NoClassDefFoundError: com.fragments.HomeFragment

【问题讨论】:

  • 你能仔细检查一下你的活动包吗?你在清单中声明了吗?
  • 是的,我有一个正在运行的应用程序。在活动中实现内部片段时出现异常
  • 您发布的代码与您面临的问题无关。任何地方都没有提到MainActivity
  • 另外你应该熟悉[Java编码约定][1],尤其是包、类和方法,然后更新你的代码以匹配,否则看你的代码有点痛苦。
  • OnMoreButtonClickListener 我认为没有初始化

标签: android exception interface fragment


【解决方案1】:

请问,你在哪里初始化你的监听器? 你真的初始化了吗? mListener 的值是多少?

          mMoreButton.setOnClickListener(v -> {
            if (mListener != null) {
                mListener.onMoreClicked();
            }
        });

【讨论】:

  • 好的,谢谢。这个 V 是从哪里来的?你能扩展这个 -> 部分吗?
猜你喜欢
  • 2011-10-06
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 2012-10-28
  • 2021-12-22
相关资源
最近更新 更多