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(); } }