我需要一個自定義的relativeLayout,因爲我將在不同的列表視圖中多次使用它。無論哪種列表視圖,自定義的relativeLayout的點擊監聽器的意圖都是啓動一個活動。所以我在這個類中編寫了點擊監聽器,而不是在適配器中使用getView()。 我想添加點擊偵聽器到自定義的relativeLayout,並且將自定義的relativeLayout作爲一個項目添加到列表視圖中,但是當我單擊該項目時,偵聽器不起作用。 我該怎麼辦?請幫忙。如何添加點擊監聽器到自定義relativeLayout
自定義的RelativeLayout:
public class SearchCourseItem extends RelativeLayout {
@Bind(R.id.iv_search_course)
ImageView mIvSearchCourse;
@Bind(R.id.tv_search_course_title)
TextView mTvSearchCourseTitle;
@Bind(R.id.tv_search_course_detail)
TextView mTvSearchCourseDetail;
private SearchCourseEntity.DataEntity datas;
public SearchCourseItem(Context context) {
super(context);
init(context);
}
public void init(Context context) {
setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
LayoutInflater.from(context).inflate(R.layout.item_search_course, this);
ButterKnife.bind(this);
}
public void setData(SearchCourseEntity.DataEntity datas) {
this.datas = datas;
mTvSearchCourseDetail.setText(datas.getDescription());
mTvSearchCourseTitle.setText(datas.getName());
ImageLoader.getInstance().displayImage(datas.getPicture(), mIvSearchCourse, UILHelper.getMediumPlaceHolderBaseBuilder().build());
}
@Override
public void setOnClickListener(OnClickListener l) {
Intent intent = new Intent();
if (datas.getType().equals("workout")) {
intent.setClass(getContext(), DailyTrainActivity.class);
intent.putExtra("workoutid", datas.getId());
} else {
intent.setClass(getContext(), PlanActivity.class);
intent.putExtra("planid", datas.getId());
}
getContext().startActivity(intent);
}
}
適配器:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SearchCourseItem searchCourseItem;
if (convertView != null && convertView instanceof SearchCourseItem) {
searchCourseItem = (SearchCourseItem) convertView;
} else {
searchCourseItem = new SearchCourseItem(mContext);
}
searchCourseItem.setData(mDataEntities.get(position));
return searchCourseItem;
}
試圖通過添加監聽到你的convertView getView方法內部 – DadoZolic
要調用它,並通過一個傾聽者的首要'setOnClickListener'代替。我想這就是爲什麼沒有觸發點擊。 – AlbAtNf
您能否描述爲什麼您需要自定義RelativeLayout? – hardartcore