先是项目中经常用到点击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!
本文介绍了如何在Android中实现ListView的条目点击后展开内容的功能。通过监听ListView的点击事件,记录点击位置,并在Bean对象中设置标记来控制Item布局的显示与隐藏。在Adapter中根据Bean的标记状态决定内容是否显示,提供了一种简单实现此功能的方法。
3164

被折叠的 条评论
为什么被折叠?



