listview嵌套Gribview不能正常改变颜色 用集合保存每个item中控件的状态 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看你的代码应该是通过colorpos来标记当前点击了那个textView,然后通过和getView中position的对应关系来更新,逻辑上按说是行得通的,如果出错,还是这种错误的话,我首先会怀疑是不是传进来的colorpos和getView中的position对应不上,比如,一个从0开始一个从1开始 将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改 将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改你误解我的意思了,我不是让你改colorpos的初始值,我是说,你在getView的时候第一行,第一个位置是0我怀疑,你click的时候,第一行,第一个位置setColorPos(int colorPos) set的是1你log打印一下这些值,是不是匹配,我怀疑是这个地方的问题 将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(); }同前一次测试一样 将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呢?这个你应该查一下。 楼上说得对,你listview的adapter可能出错了,导致你set的时候把所有的Colorpos都设置了一遍 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 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 将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都贴上代码,烦劳前辈帮忙看看 很奇怪的现象,求解!! android得到刚拍照的照片的路径,在线等 华为C8650 Root,手机上已显示Root,但Adb Shelll依然是$,为什么? android sqlite数据库无法打开 andriod自带email如何支持html邮件发送? Service访问 android2.2环境下控件开发遇到的问题,不能编译通过 Android 请问如何在service中获得传感器的值 可以手动拖动TextView里面的内容 请问关于button的设置 安卓自动分页 ListView不显示数据,咋回事啊?
将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改
将int colorpos=0后,第一行中的GribView的textview默认会被选中,但还是不能更改你误解我的意思了,我不是让你改colorpos的初始值,我是说,
你在getView的时候第一行,第一个位置是0
我怀疑,你click的时候,第一行,第一个位置setColorPos(int colorPos) set的是1
你log打印一下这些值,是不是匹配,我怀疑是这个地方的问题
将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();
}同前一次测试一样
将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呢?这个你应该查一下。
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
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
将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都贴上代码,烦劳前辈帮忙看看