Android零散,零散钟点工
2016-03-13
Android零散
ListView中嵌套GridView
要实现分组列表
这样的效果:点击ListView中的分组名称,即展开此分组显示其包含的项目。
public class UnfoldGridView extends GridView {
public UnfoldGridView(Context context) {
super(context);
}
public UnfoldGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public UnfoldGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = View.MeasureSpec.makeMeasureSpec(900000, View.MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
makeMeasureSpec中给一个很大的size,然后使用AtMost使其保持够大即可。
setAdapter和addHeaderView、addFooterView
可以使用addHeaderView和addFooterView来为ListView添加首尾的个性视图。两者都可以多次调用来添加多个header和footer。
When first introduced, this method could only be called before setting the adapter with setAdapter(ListAdapter). Starting with KITKAT, this method may be called at any time. If the ListView's adapter does not extend HeaderViewListAdapter, it will be wrapped with a supporting instance of WrapperListAdapter.
所以,为了保持兼容性,无论是在API 19之前或之后,保持addHeaderView和addFooterView在setAdapter之前执行。addHeaderView如果在setAdapter之后执行,那么在API 19之前的版本直接回报错。而addFooterView在setAdapter之后执行的话,虽然不引起运行时错误——但是更迷惑的是——添加的视图是看不到了。
ListView的getItemViewType
一个页面中当要连续显示多个不同的列表时,或者间隔性地显示多种不同的View时,需要用到ListView的两个方法:
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getViewTypeCount() {
return super.getViewTypeCount();
}
getItemViewType方法需要注意的是,其定义的ITEM_XX这样的整数常量,其取值范围需要在0~getViewTypeCount()-1
之间,下面是getItemViewType返回值的描述:
An integer representing the type of View. Two views should share the same type if one can be converted to the other in getView. Note: Integers must be in the range 0 to getViewTypeCount - 1. IGNORE_ITEM_VIEW_TYPE can also be returned.
在区间外的viewType值,会引起运行时的indexoutofboundexception错误,这个是ListView自身的限制。
startActivityForResult和活动的launchMode
Activity_A启动Activity_B后,需要Activity_B在完成操作后返回的一些数据:
//Activity_A中
private final int REQUEST_CODE_EDIT_ITEM = 2;
public void startPageBForEdit() {
Intent start = new Intent(this, EditActivity.class);
startActivityForResult(start, REQUEST_CODE_EDIT_ITEM);
}
//Activity_B中
public void setResult() {
Intent data = new Intent();
data.putExtra("itemDelete", true);
setResult(RESULT_OK, data);
}
在Activity_A中接收数据:
protected void onActivityResult(int requestCode, int resultCode,