问题描述:首先我有一个ListView,每个Item中包含的布局有若干控件,我让一部分隐藏。当我点击一个按钮时使该隐藏部分出现,点击另一个按钮,使该部分消失。        
             我用一个类继承了BaseAdapter类,对其中的按钮添加点击事件 ,利用控件的setVisibility属性控制该LinearLayout控件的显示和消失,按常理,每个出现在该Item的下方(按照原本布局的位置),但是结果却不是这样,有时该隐藏部分会出现在最下方,还会有时间上的延迟,我在点击事件里添加了日志,日志能在事件发生后迅速作出相应的。但是界面却不能。
          我尝试使用.notifyDataSetChanged()函数:在Activity里面设置线程,探测事件引起的界面改变,然后调用,可是没有明显可见的结果产生

解决方案 »

  1.   

    深入了解一下Adapter的实现原理吧
      

  2.   

    我也有类似的问题,要不是布局不对,要不是该显示的没显示,要不是隐藏的没隐藏。最后还是这个item手动重绘一下,这样干脆痛快。
    至于为啥有这样问题,我也不清楚,看后面跟帖,关注一下。
      

  3.   

    ListView更新显示时,从重用现有的已生成的item view,所以要控制好每个要显示项目对应的item view。
    楼主的代码估计就是这地方出了问题。
    贴一段自己的自定义BaseActivity类中的代码给楼主做下参考,根据条件切换item的图片显示。
    @Override
    public View getView(int position, View view, ViewGroup arg2) {
    // TODO Auto-generated method stub
    class ViewHolder {
    public ImageView image;
    public TextView name;
    public ImageView favorite;
    }

    ViewHolder holder = null;
    if (view == null) {
    holder = new ViewHolder();
    view = LayoutInflater.from(context).inflate(
    R.layout.layout_item_list_view, null);
    holder.image = (ImageView) view.findViewById(R.id.image);
    holder.name = (TextView) view.findViewById(R.id.name);
    holder.favorite = (ImageView) view.findViewById(R.id.favorite); holder.favorite.setOnClickListener(this);
    view.setTag(holder);
    } else {
    holder = (ViewHolder) view.getTag();
    } holder.name.setText(itemName);

    if(bFavorite){
    holder.favorite.setImageResource(R.drawable.icon_star);
    }else{
    holder.favorite.setImageResource(R.drawable.icon_star_gray);
    } return view;

    }
      

  4.   

    读懂adapter 重写,最后得到数据后notify()   listview.invalit();
      

  5.   

    你可以把position放到你的button的tag里和要显示隐藏的控件的tag里,这样就可以得到点击的是哪个position上的button了。。