您的位置:首页 > 移动开发 > Android开发

Android ListView滑动删除

2014-01-03 10:00 316 查看
类似于微信:

TestActivity.java

importjava.util.ArrayList;
importjava.util.List;
importandroid.os.Bundle;
importandroid.R.integer;
importandroid.app.Activity;
importandroid.util.DisplayMetrics;
importandroid.view.Menu;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.View.OnTouchListener;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.Button;
importandroid.widget.HorizontalScrollView;
importandroid.widget.LinearLayout;
importandroid.widget.LinearLayout.LayoutParams;
importandroid.widget.ListView;
importandroid.widget.TextView;

publicclassTestActivityextendsActivity
{
ListViewlistView;

List<String>infos=newArrayList<String>();

DisplayMetricsdm;

@Override
protectedvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
listView=(ListView)findViewById(R.id.lv);
for(inti=0;i<25;i++)
{
infos.add("info"+i);

}

dm=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
SwipAdapteradapter=newSwipAdapter();
listView.setAdapter(adapter);
}

classSwipAdapterextendsBaseAdapter
{

@Override
publicintgetCount()
{
//TODOAuto-generatedmethodstub
returninfos.size();
}

@Override
publicCharSequencegetItem(intposition)
{
//TODOAuto-generatedmethodstub
returninfos.get(position);
}

@Override
publiclonggetItemId(intposition)
{
//TODOAuto-generatedmethodstub
returnposition;
}

@Override
publicViewgetView(finalintposition,ViewconvertView,ViewGroupparent)
{
//TODOAuto-generatedmethodstub
finalViewholderholder;
if(convertView==null)
{
convertView=View.inflate(TestActivity.this,R.layout.item,null);
holder=newViewholder();
holder.ll_content=(LinearLayout)convertView.findViewById(R.id.ll_content);
holder.ll_action=(LinearLayout)convertView.findViewById(R.id.ll_action);
holder.tv_content=(TextView)convertView.findViewById(R.id.tv_content);
holder.btn_del=(Button)convertView.findViewById(R.id.btn_del);
holder.hs=(HorizontalScrollView)convertView.findViewById(R.id.hs);
//设置ll_content的宽度为屏幕宽度
LayoutParamsparams=(LayoutParams)holder.ll_content.getLayoutParams();
params.width=dm.widthPixels;
convertView.setTag(holder);
}
else
{
holder=(Viewholder)convertView.getTag();
}

holder.tv_content.setText(getItem(position));
convertView.setOnTouchListener(newOnTouchListener()
{

@Override
publicbooleanonTouch(Viewv,MotionEventevent)
{

switch(event.getAction())
{
caseMotionEvent.ACTION_UP:
intx=holder.hs.getScrollX();
intwidth=holder.ll_action.getWidth();
if(x<width/2)
{
holder.hs.scrollBy(0,0);
}
else
{
holder.hs.smoothScrollBy(width,0);
}
break;
default:
break;
}

returnfalse;
}
});

holder.btn_del.setOnClickListener(newOnClickListener()
{

@Override
publicvoidonClick(Viewv)
{

infos.remove(position);
notifyDataSetChanged();
}
});
//这里防止删除一条item后,ListView处于操作状态,直接还原
if(holder.hs.getScrollX()!=0)
{
holder.hs.scrollTo(0,0);
}
returnconvertView;
}

finalclassViewholder
{
LinearLayoutll_content;

LinearLayoutll_action;

TextViewtv_content;

Buttonbtn_del;

HorizontalScrollViewhs;
}

}

}


布局文件:test.xml

<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns: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"
>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv"
/>

</RelativeLayout>


item.xml

<?xmlversion="1.0"encoding="utf-8"?>
<HorizontalScrollViewxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/hs"
android:scrollbars="none"
>

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>

<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tv_content"
android:gravity="center"
/>
</LinearLayout>

<LinearLayout
android:id="@+id/ll_action"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_del"
android:text="Delete"
/>
</LinearLayout>
</LinearLayout>

</HorizontalScrollView>


界面:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: