我自己一個人弄的公司的產品客戶端,所以還是想記錄下來以免忘記或者丟失...
在我的上一篇博文(點擊打開鏈接)是一個文件管理的東西,基礎組件也是ListView所以在此只是改動一下而已。
單擊:
點擊出現按鈕比較簡單只需要替換上文中file_row.xml的checkbox為button就可以,然后自己實現onclicklistener就行了,唯一要注意的就是要在xml文件中的button的android:clickable屬性設置為true就可以了。
滑動:
滑動來說也相對比較簡單需要在上文種FileAdapter.java類中getView方法里的convertView參數對象設置ontouchlistener就可以了,具體看代碼:
- @Override
- public View getView(int position,View convertView,ViewGroup parent){
- ViewHolder holder;
- if(convertView == null){
- convertView = mInflater.inflate(R.layout.filemanage, null);
- convertView.setOnTouchListener(new OnTouchListener(){
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- switch(event.getAction())//根據動作來執行代碼
- {
- case MotionEvent.ACTION_MOVE://滑動
- Toast.makeText(context, "move...", Toast.LENGTH_SHORT).show();
- break;
- case MotionEvent.ACTION_DOWN://按下
- Toast.makeText(context, "down...", Toast.LENGTH_SHORT).show();
- DownX = event.getX();
- break;
- case MotionEvent.ACTION_UP://松開
- UpX = event.getX();
- Toast.makeText(context, "up..." + Math.abs(UpX-DownX), Toast.LENGTH_SHORT).show();
- if(Math.abs(UpX-DownX) > 20){
- ViewHolder holder = (ViewHolder) v.getTag();
- holder.cBox.setVisibility(View.VISIBLE);
- }
- break;
- default:
- }
- return true;
- }
- });
- holder = new ViewHolder();
- VHs.add(holder);
- holder.text = (TextView) convertView.findViewById(R.id.filetext);
- holder.text.setTextColor(context.getResources().getColor(R.color.text_color));
- holder.icon = (ImageView) convertView.findViewById(R.id.fileicon);
- holder.cBox = (Button) convertView.findViewById(R.id.delete_btn);
- holder.cBox.setOnClickListener(new OnClickListener(){
- public void onClick(View v) {
- Toast.makeText(context, "btn click...", Toast.LENGTH_SHORT).show();
- }
- });
- convertView.setTag(holder);
- }else{
- holder = (ViewHolder) convertView.getTag();
- }
- File f=new File(paths.get(position).toString());
- if(items.get(position).toString().equals("goroot")){
- holder.text.setText("返回根目錄");
- holder.icon.setImageBitmap(mIcon1);
- holder.cBox.setVisibility(isVisibility.get(position));
- }else if(items.get(position).toString().equals("goparent")){
- holder.text.setText("返回上一級");
- holder.icon.setImageBitmap(mIcon2);
- holder.cBox.setVisibility(isVisibility.get(position));
- }else{
- holder.text.setText(f.getName());
- if(f.isDirectory()){
- holder.icon.setImageBitmap(mIcon3);
- holder.cBox.setVisibility(isVisibility.get(position));
- }else{
- holder.icon.setImageBitmap(mIcon4);
- holder.cBox.setVisibility(isVisibility.get(position));
- }
- }
- return convertView;
- }
滑動多少距離產生效果自己計算,不過我給的20好像少了點。
///發現listitem 不響應onItemClick;只能在up事件后調用;這是我修改后的代碼:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())// 根據動作來執行代碼
{
case MotionEvent.ACTION_MOVE:// 滑動
break;
case MotionEvent.ACTION_DOWN:// 按下
v.setPressed(true);//item的點擊效果
downX = event.getX();
break;
case MotionEvent.ACTION_UP:// 松開
v.setPressed(false);//item的點擊效果
upX = event.getX();
if (Math.abs(upX - downX) > 50) {
Button bt_delete = (Button) v.findViewById(R.id.delete);
bt_delete.setVisibility(View.VISIBLE);
return true;
}
//調用onItemClick接口的實現
listView.performItemClick(v, pos, listView.getItemIdAtPosition(pos));
return false;
default:
break;
}
return true;
}