单击列表视图项内的元素的事件以切换ListItem的内容

时间:2014-08-03 13:37:00

标签: java android xml listview android-listview

我的Android应用内有一个活动,其中列出了 ListView 中的一些信息,在每个项目的左上角有一个更多信息图标,当用户触摸时此图标应用程序应将此列表项的内容更改为一些有用信息,并且图标应更改为另一个图标,例如 close 图标,再次当用户触摸关闭图标应用程序时应显示列表项内容。

为了更改Icon,我使用了这段代码,但第一次点击图标没有任何反应,第二次更改,有时当我点击其中一个图标时,另一个列表项的图标会发生变化。

ListActivity.java

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View viewCliced, int position, long id) 
    {
        img = (ImageView)viewCliced.findViewById(R.id.img_icon);
        img.setOnClickListener(new OnClickListener() 
        {
            @Override
            public void onClick(View arg0) 
            {
                img.setImageResource(R.drawable.setting);
            }
        }); 
   }
 });

此代码会更改图标,但用户应触摸两次图标,有时会更改另一个列表项的图标:|

这是ListView项目的XML

listitem.xml

<?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="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/item_select"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:weightSum="8" >

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:gravity="top|left"
                android:orientation="vertical" >

                <ImageView
                    android:id="@+id/img_icon"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="5dp"
                    android:src="@drawable/bookabout" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="7"
                android:gravity="right|center_vertical"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/txt_subject"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="15dp"
                    android:text="نام فصل"
                    android:textColor="#000000" />
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="right|center_vertical"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/txt_explanation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="15dp"
                android:text="توضیحات فصل درسی"
                android:textColor="#000000" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我应该如何开发此功能? 当用户触摸ListView项目中的Icon

时,在ListView项目的两种内容之间切换

我读了很多关于列表视图的文章,但我找不到办法做到这一点,

非常感谢您的回答

最好的问候

1 个答案:

答案 0 :(得分:1)

“为了更改Icon我使用了这段代码,但第一次点击图标时没有任何反应,第二次更改,有时当我点击其中一个图标时,另一个列表项的图标会发生变化。”

因为您在列表侦听器中声明了侦听器,因此您第一次单击侦听器设置的图标(因为您单击列表项)并且第二次图标响应。拉出img的监听器并将其放入onCreate方法中。在适配器内修改getView方法,如下所示:

@Override
public View getView(int position, View row, ViewGroup parent) {
    final int listItemPosition = position;
    ImageView img = (ImageView)row.findViewById(R.id.image1);

    img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // Change icon here

            // If you'd like to delete item use the code below
            // List.remove(listItemPosition);
            // Adapter.this.notifyDataSetChanged();
        }
    });
}