繁体   English   中英

如何将点击侦听器添加到自定义relativeLayout

[英]How to add click listener to custom relativeLayout

我需要一个自定义的relativeLayout,因为我将在不同的listview中多次使用它。 无论是哪种列表视图,自定义relativeLayout的单击侦听器都是相同的意图,即启动一个活动。 因此,我在此类中编写了Click侦听器,而不是在适配器中编写了getView()。 我想将单击侦听器添加到自定义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;
    }
Try onclick listener to your convertView

Code:

yourview.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                //Do something
            }
        });

return yourview;

不要覆盖

public void setOnClickListener(OnClickListener l)

将代码移至onClickListener并在您的getView()中进行设置。

@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));
searchCourseItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            if (searchCourseItem.getData().getType().equals("workout")) { //Don't know, if that is what you want!!!
                intent.setClass(getContext(), DailyTrainActivity.class);
                intent.putExtra("workoutid", datas.getId());
            } else {
                intent.setClass(getContext(), PlanActivity.class);
                intent.putExtra("planid", datas.getId());
            }
            getContext().startActivity(intent);   
        }
    });

    return searchCourseItem;
}

编辑:或者,您可以在构造函数中设置onClickListener。 仍然无需覆盖setOnClickListener。

public SearchCourseItem(Context context) {
    super(context);
    init(context);
    super.setOnClickListener(...);
}

我在RecyclerView.Adapter中做着看起来像在做的事情,我的自定义视图的构造函数将list_item.xml扩展到每个新实例中。 然后在我的适配器中,我将侦听器附加到onBindViewHolder()方法中。 但是即使从理论上讲似乎是正确的方法,也要等到我从list_item.xml的根目录布局中删除android:clickable="true"属性后它才能起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM