在itemClicked上获取listView子项

时间:2014-07-21 09:41:02

标签: android listview childviews

listView.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                int position, long id)
    {   
        //Get childViews here and set their click listener from here not from adapter 
        // something like view.forward_icon.setOnClick(...)
}});

我只想在这里获取ListView项目子项并设置其文本或从此处放置一个事件而不是来自适配器。有人可以指导我如何做到这一点。我以前做过但忘了使用这个技术。这是我的item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp" >

    <RelativeLayout
        android:id="@+id/items"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/listview_bg"
        android:padding="5dp" >

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:text="Mote"
            android:textColor="@android:color/white"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/name"
            android:padding="5dp"
            android:text="20 March 2015     17:00 to 21:00"
            android:textColor="@android:color/white" />

         <ImageView
            android:id="@+id/forward_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_margin="3dp"
            android:src="@drawable/forward_icon" />
    </RelativeLayout>

</RelativeLayout>

我想在这里获取forward_icon并从这里设置一个onclickListener。我可以从适配器做到这一点,但由于一些可访问性问题。我想这样做。

3 个答案:

答案 0 :(得分:1)

尝试以下方法:

int childcount = listView.getChildCount();
for (int i=0; i < childcount; i++){
      View v = ll.getChildAt(i);
}

然后为每个OnClickListener设置View,希望有帮助

答案 1 :(得分:1)

怎么样:

ImageView imageView = view.findViewById(R.id.forward_icon);
    imageView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {


        }

    });
}

编辑:实际上将它与zozelfelfo的回答结合起来:

int childCount = listView.getChildCount();
for (int i=0; i < childcount; i++){
    View view = listView.getChildAt(i);
    ImageView imageView = view.findViewById(R.id.forward_icon);
    imageView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {


        }

    });
}

答案 2 :(得分:0)

通过查看@zozelfelfo的答案以及其他答案,我已经记住了解决方案。

实现功能的正确方法是

listView.setOnItemClickListener(new OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id)
            {           
                TextView tv = (TextView)view.findViewById(R.id.item_title);
                // you can also get other listView item childs like this...
                tv.setOnClickListener(new OnClickListener()
                {

                    @Override
                    public void onClick(View v)
                    {
                        Toast.makeText(context, "Title is Clicked", Toast.LENGTH_LONG).show();

                    }
                });

            }});