[英]Detecting click on image in ExpandableListView group
我的group_row中有一张图片
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#8fbfff" >
<TextView
android:id="@+id/tv_category_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="TextView"
android:layout_weight="1" />
<ImageView
android:id="@+id/img_add_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ico_add_item"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:layout_marginRight="10dp" />
</LinearLayout>
我想检测何时单击此图像以及组的ID,然后检测StartActivityForResult。 我可以在自定义的ExpandableListView_Adapter中执行此操作:
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
final Category category = arr_categories.get(groupPosition);
convertView = inflater.inflate(R.layout.row_category, parent, false);
((TextView)convertView.findViewById(R.id.tv_category_name)).setText(category.getCategory_name());
ImageView img_add = (ImageView) convertView.findViewById(R.id.img_add_category);
img_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Add item to category: "+category.getCategory_id(), Toast.LENGTH_LONG).show();
// Declare on intent to use Add/Edit Note activity
Intent open_add_new_item = new Intent(context, Activity_Add_Edit_Base_Item.class);
// Pass the currently selected category ID to the Intent
open_add_new_item.putExtra("CURR_ITEM_CATEGORY", category.getCategory_id());
// Start the activity
((Activity) context).startActivityForResult(open_add_new_item, Constants.Request_Codes.REQUEST_CODE_CREATE_NEW_ITEM);
}
});
return convertView;
}
这样很好。 但是,如果可能的话,我想将此图像点击检测与适配器分开,并在我的片段中进行(我认为这样更容易实现OnActivityResult)。 我试图通过为我的ExpandableListView设置OnGroupClickListener来做到这一点:
master_lv.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
final Category c = arr_all_categories.get(groupPosition);
ImageView img_add = (ImageView) v.findViewById(R.id.img_add_category);
img_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Category c = arr_all_categories.get(groupPosition);
Toast.makeText(getActivity(), "group position: "+c.getCategory_id(), Toast.LENGTH_LONG).show();
// Declare on intent to use Add/Edit Note activity
Intent open_add_new_item = new Intent(getActivity(), Activity_Add_Edit_Base_Item.class);
// Pass the currently selected category ID to the Intent
open_add_new_item.putExtra("CURR_ITEM_CATEGORY", c.getCategory_id());
// Start the activity
startActivityForResult(open_add_new_item, Constants.Request_Codes.REQUEST_CODE_CREATE_NEW_ITEM);
}
});
return false;
}
});
但是,这根本不起作用:我没有收到Toast消息,并且Intent不会触发。
有可能这样做吗? 如果是-怎么样? 谢谢!
您需要做的第一个操作是将clickable=true
设置为自定义单元格xml的根布局。
之后,我们要做的是自定义事件筹集。 我们将使用接口。
创建一个接口类
范例:
public interface OnImageClickListener { public void onImageClicked(); }
然后在适配器中创建一个实例
public OnImageClickListener mListener;
还要在适配器的getView方法中将OnClickListener设置为imageview,然后在OnClick方法中添加以下行。
mListener.OnImageClicked();
最后,在活动中;
mAdapter.mListener = new OnImageClickListener();
魔术会在这里发生:)
或者您可以实现此接口,例如
public MyActivity implements OnItemClickListener
并让实现方法。
那么你也能
mAdapter.mListener = this;
祝你好运:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.