多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 自定義滑動刪除item的ListView。

自定義滑動刪除item的ListView。

來源:程序員人生   發布時間:2014-11-12 08:20:57 閱讀次數:2455次

首先繼承創建繼承ListView和實現OnTouchListener,OnGestureListener的類。

會使用到AbsList中的pointToPosition(int x, int y)方法,這個方法主要是根據點擊的位置獲得點擊行的在列表中的索引。

還有ViewGroup中的getChildAt(int index)方法,主要用于根據當前的索引獲得子控件。這個(這個索引以可見屏幕頂端開始)。

之所以實現OnTouchListener,OnGestureListener。是由于OnGestureListener要獲得到OnTouchListener傳遞的事件。

package com.example.mylistview; import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Toast; import android.view.GestureDetector; import android.view.GestureDetector.OnGestureListener; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; public class MyListView extends ListView implements OnTouchListener,OnGestureListener { private GestureDetector gestureDetector; private View deleteButton; private ViewGroup itemLayout; private onDeleteListener listener; private int selectedItem; private boolean isDeleteShown; private Context lcontext; public void setonDeleteListener(onDeleteListener l) { listener = l; } //回調接口 public interface onDeleteListener { void onDelete(int index); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); gestureDetector = new GestureDetector(getContext(), this); lcontext = context; setOnTouchListener(this); } //事件的傳入口,分發事件給gestureDetector。 @Override public boolean onTouch(View v, MotionEvent event) { if(isDeleteShown) { itemLayout.removeView(deleteButton); deleteButton = null; isDeleteShown = false; return false; } return gestureDetector.onTouchEvent(event); } @Override public boolean onDown(MotionEvent e) { if(!isDeleteShown) { //所按下位置的行數 selectedItem = pointToPosition((int)e.getX(),(int) e.getY()); } return true; } //處理滑動事件 @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { //如果按鈕沒有顯示并且在x軸上的速度大于在y軸上的速度 if(!isDeleteShown && Math.abs(velocityX) > Math.abs(velocityY)) { deleteButton = LayoutInflater.from(getContext()).inflate(R.layout.delete_button, null); deleteButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { itemLayout.removeView(deleteButton); deleteButton = null; isDeleteShown = false; listener.onDelete(selectedItem); } }); //(從當前頁面可見的開始)獲得1行的布局 itemLayout = (ViewGroup) getChildAt(selectedItem - getFirstVisiblePosition()); if(itemLayout == null) { Toast.makeText(lcontext, "請選擇可用的行!", Toast.LENGTH_SHORT).show(); return false; } //設置button的添加參數 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); params.addRule(RelativeLayout.CENTER_VERTICAL); itemLayout.addView(deleteButton, params); isDeleteShown = true; } return true; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub } }
以后定義刪除按鈕布局,和主界面的布局,item布局。

自定義adapter:

package com.example.mylistview; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class MyAdapter extends ArrayAdapter<String> { public MyAdapter(Context context, int resource, List<String> objects) { super(context, resource, objects); // TODO Auto-generated constructor stub } @Override public View getView(int position,View convertView,ViewGroup parent) { View view; if(convertView == null) { view = LayoutInflater.from(getContext()).inflate(R.layout.list_view_item, null); } else { view = convertView; } TextView tv = (TextView)view.findViewById(R.id.text_view); tv.setText(getItem(position)); return view; } }
主界面代碼:

</pre><pre name="code" class="java">package com.example.mylistview; import java.util.ArrayList; import java.util.List; import com.example.mylistview.MyListView.onDeleteListener; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import android.app.Activity; public class MainActivity extends Activity { MyListView myList; MyAdapter adapter; private List<String> list = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initList(); myList = (MyListView)findViewById(R.id.myList); //傳入接口,并實現相應的方法 myList.setonDeleteListener(new onDeleteListener() { @Override //根據回調傳回來的item索引刪除相應的行 public void onDelete(int index) { list.remove(index); adapter.notifyDataSetChanged(); } }); adapter = new MyAdapter(this, 0, list); myList.setAdapter(adapter); } private void initList() { list.clear(); list.add("item 1"); list.add("item 2"); list.add("item 3"); list.add("item 4"); list.add("item 5"); list.add("item 6"); list.add("item 7"); list.add("item 8"); list.add("item 9"); list.add("item 10"); list.add("item 11"); list.add("item 12"); list.add("item 13"); list.add("item 14"); list.add("item 15"); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId() == R.id.reLoad) { initList(); adapter.notifyDataSetChanged(); } return true; } }





生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 尤物国产在线 | 亚洲国产成人久久一区二区三区 | 久久久无码精品亚洲日韩按摩 | 日韩欧美国产精品 | 亚洲色图日韩 | 伊人色婷婷综在合线亚洲 | 欧美日韩无线在码不卡一区二区三区 | 欧美人与牲禽ⅹxxx伦交 | 最近免费中文字幕大全高清10 | 高清视频在线观看 | 亚洲成aⅴ人片在线观 | 亚洲 欧美 国产 中文 | 亚洲国产成人久久精品影视 | 欧美毛片网站 | 国产成人精品在视频 | 精品国产爱久久 | 精品国产区 | 免费观看成年欧美1314www色 | a天堂一码二码专区 | 精品亚洲成a人在线播放 | 美日韩在线 | 免费在线网站 | 久草久爱| 成人看片又黄又爽 | 国产一区二区久久精品 | 国产拍拍拍免费专区在线观看 | 日本a黄 | 亚洲最新视频在线观看 | 92精品国产自产在线观看 | 亚洲品质自拍网站 | 人与动性xxxxx免费 | 国产毛片在线看 | 麻豆福利在线观看 | 日韩精品一区二区三区中文精品 | aaaaaa级特色特黄的毛片 | 麻豆精品成人免费国产片 | 中文字幕第页 | 久久国产精品最新一区 | 中文字幕一区视频 | xxxx性bbbb欧美视频 | 片免费观看网站视频 |