【发布时间】: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