快速实现一个滑动显示隐藏面板的ListView
基本用法:listView = (ListView) view.findViewById(R.id.listView);
protected void notifyDataSetChanged() {
if (adapter == null) {
adapter = new CommonAdapter(context, beans, layoutId) {
@Override
public void setValues(ViewHolder helper, T item, int position) {
createItem(helper, item, position);
}
};
listView.setAdapter(new SlideExpandableListAdapter(adapter,
R.id.expandable_toggle_button, R.id.expandable));
} else {
adapter.notifyDataSetChanged();
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在你的item布局文件中需要有ID为expandable_toggle_button的把手,和ID为expandable的面板容器
典型的像下面这样:<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:orientation="vertical" >
android:id="@+id/item_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:gravity="center"
android:singleLine="true"
android:text="订单编号"
android:textColor="@color/base_black"
android:textSize="@dimen/font_middle" />
android:id="@+id/item_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:gravity="center"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:singleLine="true"
android:text="进场时间"
android:textColor="@color/base_black"
android:textSize="@dimen/font_middle" />
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:orientation="horizontal" >
android:id="@+id/item_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:gravity="center"
android:singleLine="true"
android:text="停车场名称"
android:textColor="@color/base_black"
android:textSize="@dimen/font_middle" />
android:id="@+id/expandable_toggle_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginRight="16dp"
android:src="@drawable/bg_btn_more" />
android:id="@+id/expandable"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/base_gray"
android:orientation="horizontal"
>
android:id="@+id/btn_0"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@drawable/bg_btn_0"
android:gravity="center"
android:singleLine="true"
android:text="取消订单"
android:textColor="@android:color/white"
android:textSize="@dimen/font_middle" />
android:id="@+id/btn_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@drawable/bg_btn_0"
android:gravity="center"
android:singleLine="true"
android:text="联系对方"
android:textColor="@android:color/white"
android:textSize="@dimen/font_middle" />
android:id="@+id/btn_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@drawable/bg_btn_0"
android:gravity="center"
android:singleLine="true"
android:text="退订"
android:textColor="@android:color/white"
android:textSize="@dimen/font_middle" />
android:id="@+id/btn_3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:drawableTop="@drawable/bg_btn_0"
android:gravity="center"
android:singleLine="true"
android:text="进场"
android:textColor="@android:color/white"
android:textSize="@dimen/font_middle" />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果你嫌上面的做法麻烦:
还有简单的,使用ActionSlideExpandableListView控件,无需指定具体的把手ID和面板ID;
但是我通常不这样做,因为毕竟使用的是ActionSlideExpandableListView,而不是普通的ListView,扩展性可能会受限制。
附件使用的是ActionSlideExpandableListView控件public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedData) {
super.onCreate(savedData);
// set the content view for this activity, check the content view xml file
// to see how it refers to the ActionSlideExpandableListView view.
this.setContentView(R.layout.single_expandable_list);
// get a reference to the listview, needed in order
// to call setItemActionListener on it
ActionSlideExpandableListView list = (ActionSlideExpandableListView)this.findViewById(R.id.list);
// fill the list with data
list.setAdapter(buildDummyData());
// listen for events in the two buttons for every list item.
// the 'position' var will tell which list item is clicked
list.setItemActionListener(new ActionSlideExpandableListView.OnActionClickListener() {
@Override
public void onClick(View listView, View buttonview, int position) {
/**
* Normally you would put a switch
* statement here, and depending on
* view.getId() you would perform a
* different action.
*/
String actionName = "";
if(buttonview.getId()==R.id.buttonA) {
actionName = "buttonA";
} else {
actionName = "ButtonB";
}
/**
* For testing sake we just show a toast
*/
Toast.makeText(
MainActivity.this,
"Clicked Action: "+actionName+" in list item "+position,
Toast.LENGTH_SHORT
).show();
}
// note that we also add 1 or more ids to the setItemActionListener
// this is needed in order for the listview to discover the buttons
}, R.id.buttonA, R.id.buttonB);
}
/**
* Builds dummy data for the test.
* In a real app this would be an adapter
* for your data. For example a CursorAdapter
*/
public ListAdapter buildDummyData() {
final int SIZE = 40;
String[] values = new String[SIZE];
for(int i=0;i
values[i] = "Item "+i;
}
return new ArrayAdapter(
this,
R.layout.expandable_list_item,
R.id.text,
values
);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ExpandableLayout可扩展布局,各种动画效果http://www.jcodecraeer.com/a/opensource/2015/0909/3431.html
小奋斗文章
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~