新加参数,控制listview的显示,而不是获得listView中的View对象直接改变!
来源:互联网 发布:美国人常用的软件 编辑:程序博客网 时间:2024/05/17 06:31
(1)在listView中,若需要控制ListView显示的状态,如item被选中时变红色,没有选中时变黑色,刚开始使用的方法是将直接取出所有item的View,组成一个view对象的list,然后在使用listview的类中判定选中的位置,改变相应的view,这种方法对于litview的数据比较少的时候可以有效控制,但对于多一点的情况,就容易出现内存问题。。多亏师兄提醒~
正确的方法:
(1)数据打包:自定义一个数据类,包括了控制listView的每个item的显示需要的 变量,如上述需求,需要在这个类中添加成员变量 boolean isSelected。
数据类:
public class TradeTitleAndIcon { public String titleName; public int titleIcon; public int titleIconRed; public boolean selected; public TradeTitleAndIcon(String titleName,int titleIcon,int titleIconRed,boolean selected) { this.titleName=titleName; this.titleIcon=titleIcon; this.titleIconRed=titleIconRed; this.selected=selected; }}
(2)adapter类:按要求定义getView方法,返回的View应该是由isSelected变量控制的。View的数据来源于上述类的对象组成的list。
import android.content.Context;import android.graphics.Color;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.tmall.mobile.pad.R;import com.tmall.mobile.pad.ui.trade.data.TradeTitleAndIcon;import java.util.ArrayList;public class TitleListAdapter extends BaseAdapter{ ArrayList<TradeTitleAndIcon> tradeTitleAndIconList; private Context context; private TextView titleView; private TextView iconView; public TitleListAdapter(Context c, ArrayList<TradeTitleAndIcon> tradeTitleAndIconList) { this.tradeTitleAndIconList=tradeTitleAndIconList; this.context = c; } @Override public int getCount() { // TODO Auto-generated method stub return tradeTitleAndIconList.size(); } @Override public Object getItem(int i) { // TODO Auto-generated method stub return tradeTitleAndIconList.get(i); } @Override public long getItemId(int i) { // TODO Auto-generated method stub return i; } public void setItemSelected(int position) { for (TradeTitleAndIcon tradeTitleAndIcon:tradeTitleAndIconList) { tradeTitleAndIcon.selected=false; } tradeTitleAndIconList.get(position).selected=true; notifyDataSetChanged(); } @Override public View getView(int i, View view, ViewGroup viewgroup) { titleView = null; iconView=null; if(view == null){ view = LayoutInflater.from(context).inflate(R.layout.trade_list_item_info, null); } titleView=(TextView)view.findViewById(R.id.TradeItemTitle); titleView.setText(tradeTitleAndIconList.get(i).titleName); iconView=(TextView)view.findViewById(R.id.TradeItemIcon); if (tradeTitleAndIconList.get(i).selected) { titleView.setTextColor(Color.RED); iconView.setBackgroundResource(tradeTitleAndIconList.get(i).titleIconRed); } else { titleView.setTextColor(Color.WHITE); iconView.setBackgroundResource(tradeTitleAndIconList.get(i).titleIcon); } return view; }}
(3)在adapter中定义setItemSelected方法,在这个方法中可改变数据list中的数据,注意最后一定要调用notifyDataSetChanged()方法,才能让数据的改变带动listView显示的改变。
public void setItemSelected(int position) { for (TradeTitleAndIcon tradeTitleAndIcon:tradeTitleAndIconList) { tradeTitleAndIcon.selected=false; } tradeTitleAndIconList.get(position).selected=true; notifyDataSetChanged(); }
方法调用:
titleListView.setOnItemClickListener(mOnItemClickListener);
mOnItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String itemTitle = itemTitles.get(position); TradeItemClickEvent clickEvent = new TradeItemClickEvent(itemTitle, getEventId(itemTitle)); getMessageBus().post(clickEvent); mTitleListAdapter.setItemSelected(position); allIconItemViews.get(position).setBackgroundResource(itemIconsRed.get(position)); } };
0 0
- 新加参数,控制listview的显示,而不是获得listView中的View对象直接改变!
- 打开首页,是SlidingMenu,想默认直接显示左侧的菜单(listview)而不是内容页(content
- ListView中View的显示混乱问题
- 获取listview某个item的view对象
- 复用历史缓存View对象解决ListView的OOM异常,使用句柄提高ListView显示效率(二)
- ListView控制Fragment的显示与隐藏
- ListView、GridView显示加动画
- android 改变listview的item中view的值
- ListView中的setOnItemClickListener参数
- 获得listview中的edittext文字
- listView中的item获得焦点
- listview 的onitemclick方法中的参数
- 获得所有安装的应用,复杂ListView的显示
- listview加背景图及显示斑马线的简单应用
- 控制ListView(RecyclerView)中Adapter中的控件的显示和隐藏
- 四大适配器控制ListView显示
- 四大适配器控制ListView显示
- 四大适配器控制ListView显示
- linux系统关闭ipv6
- mysql前缀索引
- android 组件RatingBar实例
- Atitit.加密算法 des aes 各个语言不同的原理与解决方案java php c#
- Android自定义照相机 预览拍照 切换前后置摄像头
- 新加参数,控制listview的显示,而不是获得listView中的View对象直接改变!
- 总结一下 material design控件 Tablayout
- 多线程编程: 条件变量(二)
- mybatis、ibatis、spring各种整合方式 .
- Atitit.ati str 字符串增强api
- R语言pdf输出中文乱码处理
- hibernate.cfg.xml中配置详解
- 回车和换行的区别
- Redis集群方案的对比