1. 指定item 不能点击事件
覆写Adapter 的 isEnabled 方法:
@Override
public boolean isEnabled(int position) {
if(position == 4) {
return false;
}
return super.isEnabled(position);
}
postion == 4, 是不能点击的,就是没有动画效果。
2. Item 的内部布局如果有CheckBox 之类需要响应
Item 的布局需要需要加入android:descendantFocusability="blocksDescendants" 这个属性,就可以响应子view 的事件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:descendantFocusability="blocksDescendants"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="60dp">
<CheckBox
android:id="@+id/task_complete"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
...
3. ListView 的分类显示
主要是在根据position 不同在getview 的时候返回不同的view。
public class TaskListAdapter extends BaseAdapter {
private Context mContext;
private List<String> mTaskList;
private List<String> mTaskList2;
public TaskListAdapter() {
super();
}
public TaskListAdapter(Context context, List<String> data,List<String> data2) {
mContext = context;
mTaskList = data;
mTaskList2 = data2;
}
@Override
public int getCount() {
return mTaskList.size() + 1 + mTaskList2.size();
}
@Override
public Object getItem(int position) {
if(position == mTaskList.size())
return null;
if(position < mTaskList.size()) {
return mTaskList.get(position);
} else {
return mTaskList2.get(position - mTaskList.size() -1);
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
//if(position == mTaskList.size()) {
// convertView = layoutInflater.inflate(R.layout.item_task_separator, null);
//}
//if(convertView == null) {
viewHolder = new ViewHolder();
if(position == mTaskList.size()) {
convertView = layoutInflater.inflate(R.layout.item_task_separator, null);
} else {
convertView = layoutInflater.inflate(R.layout.item_task_layout, null);
viewHolder.title = (TextView) convertView.findViewById(R.id.task_title);
viewHolder.desc = (TextView) convertView.findViewById(R.id.task_desc);
viewHolder.due_date = (TextView) convertView.findViewById(R.id.task_due_date);
viewHolder.due_time = (TextView) convertView.findViewById(R.id.task_due_time);
viewHolder.complete = (CheckBox) convertView.findViewById(R.id.task_complete);
if(true) {
viewHolder.select = (CheckBox) convertView.findViewById(R.id.task_select);
viewHolder.select.setVisibility(View.VISIBLE);
}
convertView.setTag(viewHolder);
}
//} else if(position != mTaskList.size()){
// viewHolder = (ViewHolder) convertView.getTag();
//}
if(position != mTaskList.size()) {
String taskItem = (String) getItem(position);
viewHolder.title.setText(taskItem);
//viewHolder.desc.setText(taskItem.desc);
Calendar calendar = Calendar.getInstance();
//calendar.setTimeInMillis(taskItem.due_date);
String formatDate = "MMM dd";
if(Locale.CHINA.getCountry().equals(Locale.getDefault().getCountry())) {
formatDate = "MM月dd日";
}
SimpleDateFormat format = new SimpleDateFormat(formatDate, Locale.getDefault());
Log.d("zhouyong", "calendar = " + calendar.toString());
Log.d("zhouyong","display name = "+Locale.getDefault().getCountry() + " "+Locale.CHINA.getCountry());
viewHolder.due_date.setText(format.format(calendar.getTime()));
format = new SimpleDateFormat("a hh:mm", Locale.getDefault());
viewHolder.due_time.setText(format.format(calendar.getTime()));
//viewHolder.complete.setChecked(taskItem.complete == 1 ? true : false);
viewHolder.complete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("zhouyong", "complete = " + ((CheckBox) v).isChecked());
}
});
}
return convertView;
}
private class ViewHolder {
TextView title;
TextView desc;
TextView due_date;
TextView due_time;
CheckBox complete;
CheckBox select;
}
}
4. ListView 默认显示在什么位置
mListView.setSelection(position);
listview.post(new Runnable() {
@Override
public void run() {
listview.smoothScrollToPosition(position);
}
});
在设置值adapter 之后调用,或者是adapter.notifyDataSetChanged() 之后调用。smoothScrollToPosition 有动画效果。
5...