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

Android中ListView动态添加删除项

2012-07-27 19:41 429 查看
ListView需要删除

参考资料

首先是创建三个全局变量:

SimpleAdapter listItemAdapter; // ListView的适配器

ArrayList<HashMap<String, Object>> listItem; // ListView的数据源,这里是一个HashMap的列表

ListView myList; // ListView控件

然后在Activity的onCreate函数中对变量进行初始化:

listItem = new ArrayList<HashMap<String, Object>>();

listItemAdapter = new SimpleAdapter(this, listItem, R.layout.mylayout,

new String[]{"image", "title", "text"},

new int[]{R.id.ItemImage, R.id.ItemTitle, R.id.ItemText});

myList = (ListView)findViewById(R.id.TaxiList);

myList.setAdapter(listItemAdapter);

添加两个私有的功能函数:

private void addItem()

{

HashMap<String, Object> map = new HashMap<String, Object>();

map.put("image", R.drawable.icon);

map.put("title", "标题");

map.put("text", "要显示的内容");

listItem.add(map);

listItemAdapter.notifyDataSetChanged();

}

private void deleteItem()

{

int size = listItem.size();

if( size > 0 )

{

listItem.remove(listItem.size() - 1);

listItemAdapter.notifyDataSetChanged();

}

}

另附上ListView的项自定义的Layout不再多说:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

android:id="@+id/RelativeLayout01"

android:layout_width="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_height="wrap_content"

android:paddingBottom="4dip"

android:paddingLeft="12dip"

android:paddingRight="12dip">

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/taxi1"

android:id="@+id/ItemImage"

android:paddingTop="4dip">

</ImageView>

<TextView

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:text="DaZhong Taxi Corporation"

android:layout_toRightOf="@+id/ItemImage"

android:id="@+id/ItemTitle"

android:textSize="24dip"></TextView>

<TextView

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:text="Tel:021-67786874"

android:id="@+id/ItemText"

android:layout_below="@+id/ItemTitle"

android:layout_toRightOf="@+id/ItemImage">

</TextView>

</RelativeLayout>

android中listview的元素删除问题

2012-01-19 14:04
写了一个listview 每行有一个删除按钮,用于删除这一行。删除按钮的click事件是在adapter里实现的
@Override

public void onClick(View v) {

Button delButton = (Button)v;

String title = (String)delButton.getTag();

preference.getAllViews().remove(title);

mTitList.remove(title);

baseAdapter.notifyDataSetChanged();

}

此时会重新调用getView方法
@Override

public View getView(int position, View convertView, ViewGroup parent) {

LinearLayout layout = null;

TicTacToeNode node = null;

if (position == 0) {

node = new TicTacToeNode();

node.setTitle("首页");

}

else {

node = preference.getNodeByTitle(mTitList.get(position));

}

// if (convertView == null) {



LayoutInflater inflater = LayoutInflater.from(mContext);

layout = (LinearLayout)inflater.inflate(R.layout.windows_manage_list_item, null);



ImageView icon = (ImageView)layout.findViewById(R.id.item_icon);

if (position == 0){

icon.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.icon));

}

else {

Bitmap iconBitmap = ResourceUtil.getImageBySD(Preference.SDCARD_URL + node.getIcon());

icon.setImageBitmap(iconBitmap);

//icon.setImageBitmap(Preference.GetInstence().getAllViews().get(node.getTitle()).getDrawingCache());

}



TextView titleView = (TextView)layout.findViewById(R.id.item_name);

titleView.setText(node.getTitle());

titleView.setTextSize(14);

Button deleteButton = (Button)layout.findViewById(R.id.del_button);

if (position == 0) {

deleteButton.setVisibility(View.INVISIBLE);

}

else {

deleteButton.setVisibility(View.VISIBLE);

deleteButton.setOnClickListener(deleteButtonListener);

deleteButton.setFocusable(false);

deleteButton.setTag(node.getTitle());

}



// }

// else {

// layout = (LinearLayout)convertView;

// }



return layout;

}
因为这里的复用机制,所以判断convertView为空时才创建新的行view,此时实际效果是删除了第一行元素(只是视图错乱,数据没有问题),我想是应该removeView来删除这个view来防止上面的问题,但如何获得这个view呢
待验证方式:根据button的tag记下此行的index,从传递过来的listview删除掉此view

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