繁体   English   中英

检测ExpandableListView组中的图像单击

[英]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.

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