text: package com.yydcdut.demo;
  
  import android.content.pm.ApplicationInfo;
  import android.graphics.Color;
  import android.os.Bundle;
  import android.support.v7.app.AppCompatActivity;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.AdapterView;
  import android.widget.BaseAdapter;
  import android.widget.ImageView;
  import android.widget.TextView;
  import android.widget.Toast;
  
  import com.yydcdut.sdlv.Menu;
  import com.yydcdut.sdlv.MenuItem;
  import com.yydcdut.sdlv.SlideAndDragListView;
  
  import java.util.List;
  
  /**
   * Created by yuyidong on 15/7/31.
   */
  public class HeaderFooterActivity extends AppCompatActivity implements AdapterView.OnItemLongClickListener,
          AdapterView.OnItemClickListener,
          SlideAndDragListView.OnDragDropListener, SlideAndDragListView.OnSlideListener,
          SlideAndDragListView.OnMenuItemClickListener, SlideAndDragListView.OnItemDeleteListener {
      private static final String TAG = HeaderFooterActivity.class.getSimpleName();
  
      private Menu mMenu;
      private List<ApplicationInfo> mAppList;
      private SlideAndDragListView mListView;
      private Toast mToast;
      private ApplicationInfo mDraggedEntity;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_sdlv);
          initData();
          initMenu();
          initUiAndListener();
          mToast = Toast.makeText(HeaderFooterActivity.this, "", Toast.LENGTH_SHORT);
      }
  
      public void initData() {
          mAppList = getPackageManager().getInstalledApplications(0);
      }
  
      public void initMenu() {
          mMenu = new Menu(true);
          mMenu.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn_width) * 2)
                  .setBackground(Utils.getDrawable(this, R.drawable.btn_left0))
                  .setText("One")
                  .setTextColor(Color.GRAY)
                  .setTextSize(14)
                  .build());
          mMenu.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn_width))
                  .setBackground(Utils.getDrawable(this, R.drawable.btn_left1))
                  .setText("Two")
                  .setTextColor(Color.BLACK)
                  .setTextSize(14)
                  .build());
          mMenu.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn_width) + 30)
                  .setBackground(Utils.getDrawable(this, R.drawable.btn_right0))
                  .setText("Three")
                  .setDirection(MenuItem.DIRECTION_RIGHT)
                  .setTextColor(Color.BLACK)
                  .setTextSize(14)
                  .build());
          mMenu.addItem(new MenuItem.Builder().setWidth((int) getResources().getDimension(R.dimen.slv_item_bg_btn_width_img))
                  .setBackground(Utils.getDrawable(this, R.drawable.btn_right1))
                  .setDirection(MenuItem.DIRECTION_RIGHT)
                  .setIcon(getResources().getDrawable(R.drawable.ic_launcher))
                  .setText("Four")
                  .setTextColor(Color.BLACK)
                  .setTextSize(14)
                  .build());
      }
  
      public void initUiAndListener() {
          mListView = (SlideAndDragListView) findViewById(R.id.lv_edit);
          View header = LayoutInflater.from(this).inflate(R.layout.item_header_footer, null);
          View footer = LayoutInflater.from(this).inflate(R.layout.item_header_footer, null);
          footer.setBackgroundColor(0xff0000bb);
          mListView.addHeaderView(header);
          mListView.addFooterView(footer);
          mListView.setMenu(mMenu);
          mListView.setAdapter(mAdapter);
          mListView.setOnItemClickListener(this);
          mListView.setOnDragDropListener(this);
          mListView.setOnItemLongClickListener(this);
          mListView.setOnSlideListener(this);
          mListView.setOnMenuItemClickListener(this);
          mListView.setOnItemDeleteListener(this);
      }
  
      private BaseAdapter mAdapter = new BaseAdapter() {
          @Override
          public int getCount() {
              return mAppList.size();
          }
  
          @Override
          public Object getItem(int position) {
              return mAppList.get(position);
          }
  
          @Override
          public long getItemId(int position) {
              return mAppList.get(position).hashCode();
          }
  
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              CustomViewHolder cvh;
              if (convertView == null) {
                  cvh = new CustomViewHolder();
                  convertView = LayoutInflater.from(HeaderFooterActivity.this).inflate(R.layout.item_custom_2, null);
                  cvh.imgLogo = (ImageView) convertView.findViewById(R.id.img_item_edit);
                  cvh.txtName = (TextView) convertView.findViewById(R.id.txt_item_edit);
                  cvh.imgLogo2 = (ImageView) convertView.findViewById(R.id.img_item_edit2);
                  convertView.setTag(cvh);
              } else {
                  cvh = (CustomViewHolder) convertView.getTag();
              }
              ApplicationInfo item = (ApplicationInfo) this.getItem(position);
              cvh.txtName.setText(item.loadLabel(getPackageManager()));
              cvh.imgLogo.setImageDrawable(item.loadIcon(getPackageManager()));
              cvh.imgLogo2.setImageDrawable(item.loadIcon(getPackageManager()));
              return convertView;
          }
  
          class CustomViewHolder {
              public ImageView imgLogo;
              public TextView txtName;
              public ImageView imgLogo2;
          }
      };
  
      @Override
      public void onDragViewStart(int beginPosition) {
          mDraggedEntity = mAppList.get(beginPosition);
          toast("onDragViewStart   beginPosition--->" + beginPosition);
      }
  
      @Override
      public void onDragDropViewMoved(int fromPosition, int toPosition) {
          ApplicationInfo applicationInfo = mAppList.remove(fromPosition);
          mAppList.add(toPosition, applicationInfo);
          toast("onDragDropViewMoved   fromPosition--->" + fromPosition + "  toPosition-->" + toPosition);
      }
  
      @Override
      public void onDragViewDown(int finalPosition) {
          mAppList.set(finalPosition, mDraggedEntity);
          toast("onDragViewDown   finalPosition--->" + finalPosition);
      }
  
      @Override
      public void onSlideOpen(View view, View parentView, int position, int direction) {
          toast("onSlideOpen   position--->" + position + "  direction--->" + direction);
      }
  
      @Override
      public void onSlideClose(View view, View parentView, int position, int direction) {
          toast("onSlideClose   position--->" + position + "  direction--->" + direction);
      }
  
      @Override
      public int onMenuItemClick(View v, int itemPosition, int buttonPosition, int direction) {
          toast("onMenuItemClick   itemPosition--->" + itemPosition + "  buttonPosition-->" + buttonPosition + "  direction-->" + direction);
          switch (direction) {
              case MenuItem.DIRECTION_LEFT:
                  switch (buttonPosition) {
                      case 0:
                          return Menu.ITEM_NOTHING;
                      case 1:
                          return Menu.ITEM_SCROLL_BACK;
                  }
                  break;
              case MenuItem.DIRECTION_RIGHT:
                  switch (buttonPosition) {
                      case 0:
                          return Menu.ITEM_SCROLL_BACK;
                      case 1:
                          return Menu.ITEM_DELETE_FROM_BOTTOM_TO_TOP;
                  }
          }
          return Menu.ITEM_NOTHING;
      }
  
      @Override
      public void onItemDeleteAnimationFinished(View view, int position) {
          mAppList.remove(position - mListView.getHeaderViewsCount());
          mAdapter.notifyDataSetChanged();
          toast("onItemDeleteAnimationFinished   position--->" + position);
      }
  
      @Override
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
          toast("onItemLongClick   position--->" + position);
          return false;
      }
  
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          toast("onItemClick   position--->" + position);
      }
  
      private void toast(String toast) {
          mToast.setText(toast);
          mToast.show();
      }
  
  }
  