国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android滑動刪除數據功能的實現代碼

2019-12-12 03:58:32
字體:
來源:轉載
供稿:網友

今天學習了新的功能那就是滑動刪除數據。先看一下效果

我想這個效果大家都很熟悉吧。是不是在qq上看見過這個效果。俗話說好記性不如賴筆頭,為了我的以后,為了跟我一樣自學的小伙伴們,我把我的代碼粘貼在下面。

activity_lookstaff.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent" >   <TextView    android:id="@+id/tv_title"    style="@style/GTextView"    android:text="全部員工" />  <com.rjxy.view.DeleteListView    android:id="@+id/id_listview"    android:layout_width="fill_parent"    android:layout_height="wrap_content"     android:layout_below="@+id/tv_title">  </com.rjxy.view.DeleteListView></RelativeLayout>

delete_btn.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:orientation="vertical" >   <Button     android:id="@+id/id_item_btn"    android:layout_width="60dp"    android:singleLine="true"    android:layout_height="wrap_content"    android:text="刪除"     android:background="@drawable/d_delete_btn"     android:textColor="#ffffff"     android:paddingLeft="15dp"     android:paddingRight="15dp"     android:layout_alignParentRight="true"     android:layout_centerVertical="true"     android:layout_marginRight="15dp"    /></LinearLayout>

d_delete_btn.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">  <item android:drawable="@drawable/btn_style_five_focused" android:state_focused="true"></item>  <item android:drawable="@drawable/btn_style_five_pressed" android:state_pressed="true"></item>  <item android:drawable="@drawable/btn_style_five_normal"></item></selector>

DeleteListView .java

package com.rjxy.view;import com.rjxy.activity.R;import android.content.Context;import android.util.AttributeSet;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewConfiguration;import android.widget.Button;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;public class DeleteListView extends ListView{  private static final String TAG = "DeleteListView";  /**   * 用戶滑動的最小距離   */  private int touchSlop;  /**   * 是否響應滑動   */  private boolean isSliding;  /**   * 手指按下時的x坐標   */  private int xDown;  /**   * 手指按下時的y坐標   */  private int yDown;  /**   * 手指移動時的x坐標   */  private int xMove;  /**   * 手指移動時的y坐標   */  private int yMove;  private LayoutInflater mInflater;  private PopupWindow mPopupWindow;  private int mPopupWindowHeight;  private int mPopupWindowWidth;  private Button mDelBtn;  /**   * 為刪除按鈕提供一個回調接口   */  private DelButtonClickListener mListener;  /**   * 當前手指觸摸的View   */  private View mCurrentView;  /**   * 當前手指觸摸的位置   */  private int mCurrentViewPos;  /**   * 必要的一些初始化   *    * @param context   * @param attrs   */  public DeleteListView(Context context, AttributeSet attrs)  {    super(context, attrs);    mInflater = LayoutInflater.from(context);    touchSlop = ViewConfiguration.get(context).getScaledTouchSlop();    View view = mInflater.inflate(R.layout.delete_btn, null);    mDelBtn = (Button) view.findViewById(R.id.id_item_btn);    mPopupWindow = new PopupWindow(view, LinearLayout.LayoutParams.WRAP_CONTENT,        LinearLayout.LayoutParams.WRAP_CONTENT);    /**     * 先調用下measure,否則拿不到寬和高     */    mPopupWindow.getContentView().measure(0, 0);    mPopupWindowHeight = mPopupWindow.getContentView().getMeasuredHeight();    mPopupWindowWidth = mPopupWindow.getContentView().getMeasuredWidth();  }  @Override  public boolean dispatchTouchEvent(MotionEvent ev)  {    int action = ev.getAction();    int x = (int) ev.getX();    int y = (int) ev.getY();    switch (action)    {    case MotionEvent.ACTION_DOWN:      xDown = x;      yDown = y;      /**       * 如果當前popupWindow顯示,則直接隱藏,然后屏蔽ListView的touch事件的下傳       */      if (mPopupWindow.isShowing())      {        dismissPopWindow();        return false;      }      // 獲得當前手指按下時的item的位置      mCurrentViewPos = pointToPosition(xDown, yDown);      // 獲得當前手指按下時的item      View view = getChildAt(mCurrentViewPos - getFirstVisiblePosition());      mCurrentView = view;      break;    case MotionEvent.ACTION_MOVE:      xMove = x;      yMove = y;      int dx = xMove - xDown;      int dy = yMove - yDown;      /**       * 判斷是否是從右到左的滑動       */      if (xMove < xDown && Math.abs(dx) > touchSlop && Math.abs(dy) < touchSlop)      {        // Log.e(TAG, "touchslop = " + touchSlop + " , dx = " + dx +        // " , dy = " + dy);        isSliding = true;      }      break;    }    return super.dispatchTouchEvent(ev);  }  @Override  public boolean onTouchEvent(MotionEvent ev)  {    int action = ev.getAction();    /**     * 如果是從右到左的滑動才相應     */    if (isSliding)    {      switch (action)      {      case MotionEvent.ACTION_MOVE:        int[] location = new int[2];        // 獲得當前item的位置x與y        mCurrentView.getLocationOnScreen(location);        // 設置popupWindow的動畫        mPopupWindow.setAnimationStyle(R.style.popwindow_delete_btn_anim_style);        mPopupWindow.update();        mPopupWindow.showAtLocation(mCurrentView, Gravity.LEFT | Gravity.TOP,            location[0] + mCurrentView.getWidth(), location[1] + mCurrentView.getHeight() / 2                - mPopupWindowHeight / 2);        // 設置刪除按鈕的回調        mDelBtn.setOnClickListener(new OnClickListener()        {          @Override          public void onClick(View v)          {            if (mListener != null)            {              mListener.clickHappend(mCurrentViewPos);              mPopupWindow.dismiss();            }          }        });        // Log.e(TAG, "mPopupWindow.getHeight()=" + mPopupWindowHeight);        break;      case MotionEvent.ACTION_UP:        isSliding = false;      }      // 相應滑動期間屏幕itemClick事件,避免發生沖突      return true;    }    return super.onTouchEvent(ev);  }  /**   * 隱藏popupWindow   */  private void dismissPopWindow()  {    if (mPopupWindow != null && mPopupWindow.isShowing())    {      mPopupWindow.dismiss();    }  }  public void setDelButtonClickListener(DelButtonClickListener listener)  {    mListener = listener;  }  public interface DelButtonClickListener  {    public void clickHappend(int position);  }}

DeleteStaffActivity .java

package com.rjxy.activity;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import com.rjxy.bean.Staff;import com.rjxy.path.Path;import com.rjxy.util.StreamTools;import com.rjxy.view.DeleteListView;import com.rjxy.view.DeleteListView.DelButtonClickListener;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.Window;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.Toast;public class DeleteStaffActivity extends Activity {  private static final int CHANGE_UI = 1;  private static final int DELETE = 3;  private static final int SUCCESS = 2;  private static final int ERROR = 0;  private DeleteListView lv;  private ArrayAdapter<String> mAdapter;  private List<String> staffs = new ArrayList<String>();  private Staff staff;  String sno;  // 主線程創建消息處理器  private Handler handler = new Handler() {    public void handleMessage(android.os.Message msg) {      if (msg.what == CHANGE_UI) {        try {          JSONArray arr = new JSONArray((String) msg.obj);          for (int i = 0; i < arr.length(); i++) {            JSONObject temp = (JSONObject) arr.get(i);            staff = new Staff();            staff.setSno(temp.getString("sno"));            staff.setSname(temp.getString("sname"));            staff.setDname(temp.getString("d_name"));            staffs.add("員工號:" + staff.getSno() + "/n姓  名:"                + staff.getSname() + "/n部  門:" + staff.getDname());          }          mAdapter = new ArrayAdapter<String>(              DeleteStaffActivity.this,              android.R.layout.simple_list_item_1, staffs);          lv.setAdapter(mAdapter);          lv.setDelButtonClickListener(new DelButtonClickListener() {            @Override            public void clickHappend(final int position) {              String s = mAdapter.getItem(position);              String[] ss = s.split("/n");              String snos = ss[0];              String[] sss = snos.split(":");              sno = sss[1];              delete();              mAdapter.remove(mAdapter.getItem(position));            }          });          lv.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent,                View view, int position, long id) {              Toast.makeText(                  DeleteStaffActivity.this,                  position + " : "                      + mAdapter.getItem(position), 0)                  .show();            }          });        } catch (JSONException e) {          e.printStackTrace();        }      } else if (msg.what == DELETE) {        Toast.makeText(DeleteStaffActivity.this, (String) msg.obj, 1)            .show();      }    };  };  @Override  protected void onCreate(Bundle savedInstanceState) {    requestWindowFeature(Window.FEATURE_NO_TITLE);    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_lookstaff);    lv = (DeleteListView) findViewById(R.id.id_listview);    select();  }  private void select() {    // 子線程更新UI    new Thread() {      public void run() {        try {          // 區別1、url的路徑不同          URL url = new URL(Path.lookStaffPath);          HttpURLConnection conn = (HttpURLConnection) url              .openConnection();          // 區別2、請求方式post          conn.setRequestMethod("POST");          conn.setRequestProperty("User-Agent",              "Mozilla/5.0(compatible;MSIE 9.0;Windows NT 6.1;Trident/5.0)");          // 區別3、必須指定兩個請求的參數          conn.setRequestProperty("Content-Type",              "application/x-www-form-urlencoded");// 請求的類型 表單數據          String data = "";          conn.setRequestProperty("Content-Length", data.length()              + "");// 數據的長度          // 區別4、記得設置把數據寫給服務器          conn.setDoOutput(true);// 設置向服務器寫數據          byte[] bytes = data.getBytes();          conn.getOutputStream().write(bytes);// 把數據以流的方式寫給服務器          int code = conn.getResponseCode();          System.out.println(code);          if (code == 200) {            InputStream is = conn.getInputStream();            String result = StreamTools.readStream(is);            Message mas = Message.obtain();            mas.what = CHANGE_UI;            mas.obj = result;            handler.sendMessage(mas);          } else {            Message mas = Message.obtain();            mas.what = ERROR;            handler.sendMessage(mas);          }        } catch (IOException e) {          // TODO Auto-generated catch block          Message mas = Message.obtain();          mas.what = ERROR;          handler.sendMessage(mas);        }      }    }.start();  }  private void delete() {    // 子線程更新UI    new Thread() {      public void run() {        try {          // 區別1、url的路徑不同          URL url = new URL(Path.deleteStaffPath);          HttpURLConnection conn = (HttpURLConnection) url              .openConnection();          // 區別2、請求方式post          conn.setRequestMethod("POST");          conn.setRequestProperty("User-Agent",              "Mozilla/5.0(compatible;MSIE 9.0;Windows NT 6.1;Trident/5.0)");          // 區別3、必須指定兩個請求的參數          conn.setRequestProperty("Content-Type",              "application/x-www-form-urlencoded");// 請求的類型 表單數據          String data = "sno=" + sno;          conn.setRequestProperty("Content-Length", data.length()              + "");// 數據的長度          // 區別4、記得設置把數據寫給服務器          conn.setDoOutput(true);// 設置向服務器寫數據          byte[] bytes = data.getBytes();          conn.getOutputStream().write(bytes);// 把數據以流的方式寫給服務器          int code = conn.getResponseCode();          System.out.println(code);          if (code == 200) {            InputStream is = conn.getInputStream();            String result = StreamTools.readStream(is);            Message mas = Message.obtain();            mas.what = DELETE;            mas.obj = result;            handler.sendMessage(mas);          } else {            Message mas = Message.obtain();            mas.what = ERROR;            handler.sendMessage(mas);          }        } catch (IOException e) {          // TODO Auto-generated catch block          Message mas = Message.obtain();          mas.what = ERROR;          handler.sendMessage(mas);        }      }    }.start();  }}

以上所述是小編給大家介紹的Android滑動刪除數據功能的實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清远市| 正阳县| 思南县| 织金县| 灵山县| 博爱县| 阜宁县| 咸阳市| 东台市| 梁平县| 谢通门县| 普宁市| 黄平县| 郴州市| 甘谷县| 科尔| 美姑县| 兰考县| 新巴尔虎左旗| 金沙县| 平阳县| 清远市| 定日县| 铁力市| 微博| 新余市| 靖州| 平陆县| 固始县| 丰台区| 迭部县| 游戏| 河东区| 凤冈县| 东乡族自治县| 桃江县| 宁强县| 古丈县| 新蔡县| 廉江市| 兴业县|