用集合保存每个item中控件的状态

解决方案 »

  1.   

    看你的代码应该是通过colorpos来标记当前点击了那个textView,然后通过和getView中position的对应关系来更新,逻辑上按说是行得通的,如果出错,还是这种错误的话,我首先会怀疑是不是传进来的colorpos和getView中的position对应不上,比如,一个从0开始一个从1开始
      

  2.   


    将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改
      

  3.   


    将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改你误解我的意思了,我不是让你改colorpos的初始值,我是说,
    你在getView的时候第一行,第一个位置是0
    我怀疑,你click的时候,第一行,第一个位置setColorPos(int colorPos) set的是1
    你log打印一下这些值,是不是匹配,我怀疑是这个地方的问题
      

  4.   


    将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改你误解我的意思了,我不是让你改colorpos的初始值,我是说,
    你在getView的时候第一行,第一个位置是0
    我怀疑,你click的时候,第一行,第一个位置setColorPos(int colorPos) set的是1
    你log打印一下这些值,是不是匹配,我怀疑是这个地方的问题前辈,我测试了,不知测试方法对错;望指教
    在if (position==colorpos) {
                          System.out.println(position);//打印(此处也打印过colorpos)
                            holder.button.setTextColor(R.color.time_people1);
                            holder.button.setBackgroundResource(R.drawable.time_red);
                    }不管点击一年级一班或二年级一班的任意一个log里面colorpos或position均显示两次0;
    public void setColorPos(int colorPos){
                     System.out.println( colorPos);//打印
                    this.colorpos=colorPos;
                    notifyDataSetChanged();
            }同前一次测试一样
      

  5.   


    将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改你误解我的意思了,我不是让你改colorpos的初始值,我是说,
    你在getView的时候第一行,第一个位置是0
    我怀疑,你click的时候,第一行,第一个位置setColorPos(int colorPos) set的是1
    你log打印一下这些值,是不是匹配,我怀疑是这个地方的问题前辈,我测试了,不知测试方法对错;望指教
    在if (position==colorpos) {
                          System.out.println(position);//打印(此处也打印过colorpos)
                            holder.button.setTextColor(R.color.time_people1);
                            holder.button.setBackgroundResource(R.drawable.time_red);
                    }不管点击一年级一班或二年级一班的任意一个log里面colorpos或position均显示两次0;
    public void setColorPos(int colorPos){
                     System.out.println( colorPos);//打印
                    this.colorpos=colorPos;
                    notifyDataSetChanged();
            }同前一次测试一样
    按照你的逻辑,都返回0,应该怎么点都是一年级一斑变红色阿。但是你的 setColorPos 因该是set错了,怎么会点不同的textview,set都是0呢?这个你应该查一下。
      

  6.   

    楼上说得对,你listview的adapter可能出错了,导致你set的时候把所有的Colorpos都设置了一遍
      

  7.   


    public class MallAttributeGridAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<ProductAttributeId> mList;
    public static int colorpos=-1;
        @SuppressWarnings("static-access")
    public void setColorPos(int colorPos){     this.colorpos=colorPos;
    //System.out.println(colorpos);
    notifyDataSetChanged();
    } public MallAttributeGridAdapter(Context mContext,
    ArrayList<ProductAttributeId> mList) {
    super();
    this.mContext = mContext;
    this.mList = mList;
    } @Override
    public int getCount() {
    if (mList == null) {
    return 0;
    } else {
    return this.mList.size();
    }
    } @Override
    public Object getItem(int position) {
    if (mList == null) {
    return null;
    } else {
    return this.mList.get(position);
    }
    } @Override
    public long getItemId(int position) {
    return position;
    } @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView == null) {
    holder = new ViewHolder();
    convertView = LayoutInflater.from(this.mContext).inflate(
    R.layout.mall_attribute_girdview_item, null, false);
    holder.button = (TextView) convertView.findViewById(R.id.textView1);

    convertView.setTag(holder); } else {
    holder = (ViewHolder) convertView.getTag();
    }
    if (position==colorpos) {

    holder.button.setTextColor(R.color.time_people1);
    holder.button.setBackgroundResource(R.drawable.time_red);
    } else {
    holder.button.setTextColor(R.color.time_people);
    holder.button.setBackgroundResource(R.drawable.time_yellow);
    }
    holder.button.setText(mList.get(position).getDetailName());
    return convertView;
    } private class ViewHolder {
    TextView button;
      
    }
    }Gribview的apadter
      

  8.   


    public class MallAttributeListAdapter extends BaseAdapter {
    private ArrayList<MallClassifyEntity> mList;
    private Context mContext;
    private MallAttributeGridAdapter gridViewAdapter;
        private HashMap<String, String>map_datail=new HashMap<String, String>();
        private String temp[];
    public MallAttributeListAdapter(
    ArrayList<MallClassifyEntity> mList,
    Context mContext) {
    super();
    this.mList = mList;
    this.mContext = mContext;
    } @Override
    public int getCount() {
    if (mList == null) {
    return 0;
    } else {
    return this.mList.size();
    }
    } @Override
    public Object getItem(int position) {
    if (mList == null) {
    return null;
    } else {
    return this.mList.get(position);
    }
    } @Override
    public long getItemId(int position) {
    return position;
    } @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView == null) {
    holder = new ViewHolder();
    convertView = LayoutInflater.from(this.mContext).inflate(
    R.layout.mall_attribute_item, null, false);
     holder.textView = (TextView)
     convertView.findViewById(R.id.textView1);
    holder.gridView = (GridView) convertView.findViewById(R.id.listview_item_gridview);
    //holder.gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
    /*holder.gridView.setClickable(false);
    holder.gridView.setPressed(false);
    holder.gridView.setEnabled(false);*/
    // holder.gridView.setTag(R.id.listview_item_gridview,);
    convertView.setTag(holder);
    } else {
    holder = (ViewHolder) convertView.getTag();
    }
            
    if (this.mList != null) {
    // if (holder.imageView != null) {
    // holder.imageView.setImageDrawable
    // (mContext.getResources().getDrawable(R.drawable.e));
    // }
    if (holder.textView != null) {
    holder.textView.setText(mList.get(position).getName());
    }
    if (holder.gridView != null) {
    final ArrayList<ProductAttributeId> arrayListForEveryGridView = this.mList
    .get(position).getAttributeList();
    gridViewAdapter = new MallAttributeGridAdapter(
    mContext, arrayListForEveryGridView);
    holder.gridView.setAdapter(gridViewAdapter);

    //获取商品属性,利用hashmap,kep为listview的position
    holder.gridView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
    int gridposition, long id) {
    gridViewAdapter.setColorPos(gridposition);
    Log.e("~~~", arrayListForEveryGridView.get(gridposition).getDetailName());

    }
    });
    }
    }
    return convertView;
    }
    private class ViewHolder {
    TextView textView;
    GridView gridView;
    }
    }Listview的adapter
    楼上是gribview的adapter到现在此问题还没有解决,再次请求前辈帮忙看看,到底是哪里出错了
    @tiantang198707
      

  9.   


    将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改你误解我的意思了,我不是让你改colorpos的初始值,我是说,
    你在getView的时候第一行,第一个位置是0
    我怀疑,你click的时候,第一行,第一个位置setColorPos(int colorPos) set的是1
    你log打印一下这些值,是不是匹配,我怀疑是这个地方的问题前辈,我测试了,不知测试方法对错;望指教
    在if (position==colorpos) {
                          System.out.println(position);//打印(此处也打印过colorpos)
                            holder.button.setTextColor(R.color.time_people1);
                            holder.button.setBackgroundResource(R.drawable.time_red);
                    }不管点击一年级一班或二年级一班的任意一个log里面colorpos或position均显示两次0;
    public void setColorPos(int colorPos){
                     System.out.println( colorPos);//打印
                    this.colorpos=colorPos;
                    notifyDataSetChanged();
            }同前一次测试一样
    按照你的逻辑,都返回0,应该怎么点都是一年级一斑变红色阿。但是你的 setColorPos 因该是set错了,怎么会点不同的textview,set都是0呢?这个你应该查一下。到现在此问题还没有解决,到底是哪里出错了 已经将两个adapter都贴上代码,烦劳前辈帮忙看看