`
wyj365372704
  • 浏览: 13971 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

ListView多布局,对item中各个组件添加独立监听器的方法

 
阅读更多

首先,给出自定义OnClickListener代码:

/*
 * 自定义的OnClickListener,提供给外部容器(Activity/Fragment 回调使用)
 */
public interface showMessageItemOnClickListener extends OnClickListener{

	/**
	 * 
	 * @param viewID	listview 中 item 内部组件的标记,可以使用R.id.xxx 作为标记,用于区分具体点击的组件
	 * @param position	listview 中 item 的序号,用于区分点击组件所在的item
	 */
	public void onClick(int viewID ,int position);

}

 

再来给出ListView Adapter代码:

public class ShowMessageAdapter extends BaseAdapter{
	private Context context ;
	private List<ShowMessage> data ;
	private showMessageItemOnClickListener onClickListener ;
	
	public ShowMessageAdapter(Context context ,List<ShowMessage> data ,showMessageItemOnClickListener onClickListener) {
		super();
		this.data = data ;
		this.context = context ;
		this.onClickListener = onClickListener ;//由外部容器传入(Activity/Fragment)
	}
	@Override
	public int getCount() {
		return data==null?0:data.size() ;
	}

	@Override
	public Object getItem(int arg0) {
		return null;
	}
	@Override
	public long getItemId(int arg0) {
		return 0;
	}

	@Override
	public View getView(final int position, View arg1, ViewGroup viewGroup) {
		OnClickListener onClickListener = new OnClickListener() {
			@Override
			public void onClick(View view) {
				switch (view.getId()) {
				case R.id.message_layout_iv_comment:
					ShowMessageAdapter.this.onClickListener.onClick(view.getId(), position) ;
					break;

				default:
					break;
				}
			}
		};
		View rootView = LayoutInflater.from(context).inflate(R.layout.message_layout, null) ;
		ImageView imageView = (ImageView) rootView.findViewById(R.id.message_layout_iv_comment);
		imageView.setOnClickListener(onClickListener) ;		
		return rootView;
	}
}

 通过getView(),内部实现的OnClickListener,调用外部容器出入的接口,传入itemPosition和ViewID参数,实现定位点击事件监听.

 

再来给出外部容器代码:

public class HomeFragment extends Fragment implements showMessageItemOnClickListener{
//省略中间代码
	@Override
	public void onClick(int viewID, int position) {
		// TODO Auto-generated method stub
		switch (viewID) {
		case R.id.message_layout_iv_comment:
			Toast.makeText(getActivity(), "position"+position, Toast.LENGTH_SHORT).show() ;
			break;

		default:
			break;
		}
	}
	
}













 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics