日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

自定義滑動刪除item的ListView。

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

首先繼承創建繼承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; } }





生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久精品网址 | 日本久久精品 | 国产乱淫av麻豆国产免费 | 亚洲色图19p | 亚洲成人精品在线 | 九色91av| 久久女 | 欧美国产在线视频 | pacopacomama在线 | 1000部精品久久久久久久久 | jizz在线播放 | 欧美一区二区在线观看视频 | 九九热在线免费视频 | 精品三区 | 91麻豆精品国产91久久久久久久久 | 91麻豆精品91久久久久久清纯 | 亚洲黄色一区二区三区 | 亚州精品国产 | 欧美黄视频 | av电影网址在线观看 | 在线观看国产麻豆 | 国产一区二区在线免费 | 91久久国产综合久久蜜月精品 | 超碰久热 | 精品亚洲国产成av人片传媒 | 亚洲精品高清视频 | 日韩av毛片在线观看 | av网站免费 | 最近中文字幕视频在线观看 | 久久精品国产一区二区三区不卡 | 福利四区| 91精品国产日韩91久久久久久 | 欧美成人免费 | h片在线免费观看 | 成人性生交大片免费观看嘿嘿视频 | 精品国产不卡一区二区三区 | 99久久国产综合精品女不卡 | 日本不卡一区二区三区在线观看 | 亚洲精品视频一区二区 | 国产福利视频导航 | 一级电影在线播放 |