listview条目点击可展开(初级)

来源:互联网 发布:牛肉干市场调查数据 编辑:程序博客网 时间:2024/05/16 00:31

先是项目中经常用到点击listview,然后展开Item的内容。我将这种需求分为两种:

  • Item的内容是一个布局(不是listview)
  • Item的内容是一个listview(或者listview类似能够滑动的控件

今天先介绍一下listview的Item内容是一个布局,第二种后期我在写文章介绍。好了,进入正题。先看下我的思路:我们可以监听一下listview的点击事件,然后记录下position,然后在该数据的Bean中设置一个flug(1:展开?2:不展开),然后刷新adapter。在adapter中,我们根据Bean中的flug,判断Item的布局是否显示。

接下来这个例子是这样的:有一个Person对象,有name,age属性,点击name,显示age,然后再点击name,age不显示。

不多说,先附上效果图。
这里写图片描述
直接上代码。

首先是XML:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <ListView        android:id="@+id/one_click_listview"        android:layout_width="match_parent"        android:layout_height="wrap_content"></ListView></LinearLayout>

这是listview Item 的布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/text_one_name"        android:layout_width="match_parent"        android:layout_height="30dp" />    <TextView        android:id="@+id/text_one_age"        android:layout_width="match_parent"        android:layout_height="50dp"/></LinearLayout>

这是Bean对象:

class  Person{    private String name;    private  String age;    private  String flug;    public String getFlug() {        return flug;    }    public void setFlug(String flug) {        this.flug = flug;    }    public Person(){}    public Person(String name, String age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getAge() {        return age;    }    public void setAge(String age) {        this.age = age;    }}

上面的Bean对象里的flug也就是标记,在adapter中需要该字段的。1:显示 2:不显示

下面是adapter:

class OneClickAdapter  extends BaseAdapter{    private  List<Person> personList;    public OneClickAdapter(){}    public List<Person> getPersonList() {        return personList;    }    public void setPersonList(List<Person> personList) {        this.personList = personList;    }    public OneClickAdapter(List<Person> personList) {        this.personList = personList;    }    @Override    public int getCount() {        return personList.size();    }    @Override    public Object getItem(int position) {        return personList.get(position);    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        final MyViewHoder myViewHoder;        if(convertView == null){            convertView = View.inflate(parent.getContext(), R.layout.one_click_item, null);            myViewHoder = new MyViewHoder();            myViewHoder.text_name = (TextView)convertView.findViewById(R.id.text_one_name);            myViewHoder.text_age = (TextView)convertView.findViewById(R.id.text_one_age);            convertView.setTag(myViewHoder);        }else{            myViewHoder = (MyViewHoder)convertView.getTag();        }        if("1".equals(personList.get(position).getFlug())){            myViewHoder.text_age.setVisibility(View.VISIBLE);            myViewHoder.text_age.setText(personList.get(position).getAge());        }else{            myViewHoder.text_age.setVisibility(View.GONE);            myViewHoder.text_age.setText(personList.get(position).getAge());        }        myViewHoder.text_name.setText(personList.get(position).getName());//        myViewHoder.text_name.setOnClickListener(new View.OnClickListener() {//            @Override//            public void onClick(View v) {//                personList.get(position).setFlug("1");//            }//        });        return convertView;    }    class MyViewHoder{        public TextView text_name;        public TextView text_age;    }}

接下来是重点:

private void setListener() {        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                if( list.get(position).getFlug() == null || list.get(position).getFlug().equals("2")){                    list.get(position).setFlug("1");                }else{                    list.get(position).setFlug("2");                }                adapter.notifyDataSetChanged();            }        });    }

上述代码是给listview设置一个监听,维护Bean中的flug字段;每一个点击更新listview之后,都更新adapter。

好了,大功告成!是不是不难呢?! 后期我再把可折叠的listview的写一下。也就是网上的expandablelistview。不过自定义listview而已。对了,文章如果有错误,记得指正…….! Thank you!

1 0
原创粉丝点击