参考:http://www.cnblogs.com/LIANQQ/p/3584374.html
1、布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/notReadList" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:cacheColorHint="#FFF"> </ListView> <RelativeLayout android:id="@+id/relative" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="bottom" android:visibility="gone"> <Button android:id="@+id/cancle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_centerVertical="true" android:background="@null" android:text="撤销 |" android:textSize="20sp" /> <TextView android:id="@+id/txtcount" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="共计" android:textSize="15sp" /> <Button android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" android:background="@null" android:text="| 删除" android:textSize="20sp" /> </RelativeLayout> </LinearLayout>
2、代码实现
public class NotReadFragment extends Fragment { private ListView listView; private Button cancelButton; private Button deleteButton; private TextView txtCount; private boolean isMulChoice = false;//是否长按 private List<String> array = new ArrayList<String>();//保存初始数据 private List<String> selectId = new ArrayList<String>();//保存选择的数据 private SparseBooleanArray isCheck = new SparseBooleanArray();//保存在滑动过程中CheckBox的状态 private RelativeLayout relativeLayout;//长按后弹出按钮的布局 private MyAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.notreadfragment, container, false); listView = (ListView) view.findViewById(R.id.notReadList); relativeLayout = (RelativeLayout) view.findViewById(R.id.relative); cancelButton = (Button) view.findViewById(R.id.cancle); deleteButton = (Button) view.findViewById(R.id.delete); txtCount = (TextView) view.findViewById(R.id.txtcount); cancelButton.setOnClickListener(listener); deleteButton.setOnClickListener(listener); //初始化数据 init(); adapter = new MyAdapter(getActivity()); listView.setAdapter(adapter); return view; } public void init() { for (int i = 0; i < 20; i++) { array.add("looper" + i); } } private View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.delete: isMulChoice = false; for (int i = 0; i < selectId.size(); i++) { for (int j = 0; j < array.size(); j++) { if (selectId.get(i).equals(array.get(j))) { array.remove(j); } } } selectId.clear(); adapter = new MyAdapter(getActivity()); listView.setAdapter(adapter); relativeLayout.setVisibility(View.GONE); break; case R.id.cancle: isMulChoice = false; selectId.clear(); adapter = new MyAdapter(getActivity()); listView.setAdapter(adapter); relativeLayout.setVisibility(View.GONE); break; default: break; } } }; @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); } class MyAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater = null; public MyAdapter(Context context) { this.context = context; this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); for (int i = 0; i < array.size(); i++) { isCheck.put(i, false); } } @Override public int getCount() { return array.size(); } @Override public Object getItem(int position) { return array.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (null == convertView) { convertView = inflater.inflate(R.layout.item, null); holder = new ViewHolder(); holder.content = (TextView) convertView.findViewById(R.id.listItem); holder.time = (TextView)convertView.findViewById(R.id.time); holder.detail = (TextView)convertView.findViewById(R.id.detail); holder.isSelect = (CheckBox) convertView.findViewById(R.id.checkItem); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.content.setText(array.get(position)); holder.isSelect.setChecked(isCheck.get(position)); if (isMulChoice){ holder.isSelect.setVisibility(CheckBox.VISIBLE); }else { holder.isSelect.setVisibility(CheckBox.INVISIBLE); } //长按 convertView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { isMulChoice = true; selectId.clear(); relativeLayout.setVisibility(View.VISIBLE); adapter = new MyAdapter(context); listView.setAdapter(adapter); return true; } }); //点击选择 convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isMulChoice) { if (holder.isSelect.isChecked()) { holder.isSelect.setChecked(false); selectId.remove(array.get(position)); isCheck.put(position,false); } else { holder.isSelect.setChecked(true); selectId.add(array.get(position)); isCheck.put(position,true); } txtCount.setText("共选择了" + selectId.size() + "项"); } else { Toast.makeText(context, "点击了" + array.get(position) + "项", Toast.LENGTH_SHORT).show(); } } }); return convertView; } } final class ViewHolder { public TextView content; public TextView time; public TextView detail; public CheckBox isSelect; } }