Android中ListView动态添加删除项

ListView需要删除

参考资料

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

SimpleAdapter listItemAdapter;  // ListView的适配器
ArrayList> listItem;  // ListView的数据源,这里是一个HashMap的列表
ListView myList;  // ListView控件

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

listItem = new ArrayList>();
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 map = new HashMap();
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不再多说:
  
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">  
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/taxi1" 
android:id="@+id/ItemImage" 
android:paddingTop="4dip">

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">
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">

 

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







你可能感兴趣的:(Android中ListView动态添加删除项)