关于在Android中如何点击GridView或者ListView中item子项达到修改子项背景的问题解决方案
2013-12-04 16:16
465 查看
曾经在项目中遇到过类似的问题。需要修改item子项的背景,达到互斥效果。
首先,写出自己的适配器。Adapter
这里以GridView为目标
1.适配器,每个人的适配器不尽相同,此为我自己写的。
关键代码。
为:
此处就是处理更换背景的代码。在Adapter中的getView方法中可以找到
if( getSelectIndex() == position ){
viewHolder.item_imageView.setVisibility(View.VISIBLE);
}else{
viewHolder.item_imageView.setVisibility(View.GONE);
}
********************************************************************************************
public class FamousteacherAdapterextends BaseAdapter {
private ArrayList<HashMap<String, Object>>dataList;
private Context
context;
private LayoutInflater
lf;
private ViewHolder
viewHolder = null;
privateint
selectIndex = -1;
public int getSelectIndex() {
returnselectIndex;
}
public void setSelectIndex(int selectIndex) {
this.selectIndex = selectIndex;
}
public FamousteacherAdapter(Context context,
ArrayList<HashMap<String, Object>> dataList) {
this.context = context;
this.dataList = dataList;
lf = LayoutInflater.from(context);
}
@Override
public int getCount() {
return
dataList.size();
}
@Override
public Object getItem(int arg0) {
return
dataList.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(finalint position, View convertView, ViewGroup parent) {
if (null == convertView) {
viewHolder =new ViewHolder();
convertView =
lf.inflate(R.layout.settingtopic_list,
null);
viewHolder.item_textview = (TextView) convertView
.findViewById(R.id.item_textview);
viewHolder.item_imageView = (ImageView) convertView
.findViewById(R.id.item_imageView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if( getSelectIndex() == position ){
viewHolder.item_imageView.setVisibility(View.VISIBLE);
}else{
viewHolder.item_imageView.setVisibility(View.GONE);
}
Map map =
dataList.get(position);
viewHolder.item_textview.setText( (CharSequence) map.get("itemText"));
return convertView;
}
class ViewHolder {
TextView item_textview;
ImageView item_imageView;
}
}
2.第二步,在你的Activity中,你要实现点击事件。
在点击事件中将点击item的Position传回适配器中。然后通知适配器数据有变化。然后效果就达到了。
famous_course_gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
publicvoid onItemClick(AdapterView<?> arg0, View view,
int arg2,
long arg3) {
if(famousteacherAdapter.getSelectIndex()==-1)
{
famousteacherAdapter.setSelectIndex(arg2);
}
else
{
famousteacherAdapter.setSelectIndex(arg2);
}
famousteacherAdapter.notifyDataSetInvalidated();//一定别忘了写这句。
}
});
首先,写出自己的适配器。Adapter
这里以GridView为目标
1.适配器,每个人的适配器不尽相同,此为我自己写的。
关键代码。
为:
此处就是处理更换背景的代码。在Adapter中的getView方法中可以找到
if( getSelectIndex() == position ){
viewHolder.item_imageView.setVisibility(View.VISIBLE);
}else{
viewHolder.item_imageView.setVisibility(View.GONE);
}
********************************************************************************************
public class FamousteacherAdapterextends BaseAdapter {
private ArrayList<HashMap<String, Object>>dataList;
private Context
context;
private LayoutInflater
lf;
private ViewHolder
viewHolder = null;
privateint
selectIndex = -1;
public int getSelectIndex() {
returnselectIndex;
}
public void setSelectIndex(int selectIndex) {
this.selectIndex = selectIndex;
}
public FamousteacherAdapter(Context context,
ArrayList<HashMap<String, Object>> dataList) {
this.context = context;
this.dataList = dataList;
lf = LayoutInflater.from(context);
}
@Override
public int getCount() {
return
dataList.size();
}
@Override
public Object getItem(int arg0) {
return
dataList.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(finalint position, View convertView, ViewGroup parent) {
if (null == convertView) {
viewHolder =new ViewHolder();
convertView =
lf.inflate(R.layout.settingtopic_list,
null);
viewHolder.item_textview = (TextView) convertView
.findViewById(R.id.item_textview);
viewHolder.item_imageView = (ImageView) convertView
.findViewById(R.id.item_imageView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if( getSelectIndex() == position ){
viewHolder.item_imageView.setVisibility(View.VISIBLE);
}else{
viewHolder.item_imageView.setVisibility(View.GONE);
}
Map map =
dataList.get(position);
viewHolder.item_textview.setText( (CharSequence) map.get("itemText"));
return convertView;
}
class ViewHolder {
TextView item_textview;
ImageView item_imageView;
}
}
2.第二步,在你的Activity中,你要实现点击事件。
在点击事件中将点击item的Position传回适配器中。然后通知适配器数据有变化。然后效果就达到了。
famous_course_gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
publicvoid onItemClick(AdapterView<?> arg0, View view,
int arg2,
long arg3) {
if(famousteacherAdapter.getSelectIndex()==-1)
{
famousteacherAdapter.setSelectIndex(arg2);
}
else
{
famousteacherAdapter.setSelectIndex(arg2);
}
famousteacherAdapter.notifyDataSetInvalidated();//一定别忘了写这句。
}
});
相关文章推荐
- Android--GridView/ListView 点击Item修改Item背景 标识是当前选择项方法
- Android--GridView/ListView 点击Item修改Item背景 标识是当前选择项方法:
- android 关于如何设置ListView中item高度问题的解决方案
- 关于 Android 中ScrollView中带有ListView 或者是Gridview的子视图的问题解决方案
- android ListView item 点击设置背景图片需要注意的问题
- android中如何去掉pulltorefreshlistview点击item时的背景颜色,与item外边距设置
- Android解决GridView或ListView点击背景变色问题
- 【Android 开发问题】ListView 嵌套 GridView导致ListView的item不可点击
- Android中listview的item点击时候去掉背景颜色或者设置成透明的
- 关于Android中Listview的item点击不响应问题的解决
- android如何设置listview点击后的item背景颜色的变换
- 关于Android中popupwindow的listview的item点击事件无效的解决方案
- Android中关于GrideView,ListView的getView中position=0,错乱的问题。(在GridView的最后面添加两个固定item)
- android中如何去掉pulltorefreshlistview点击item时的背景颜色,与item外边距设置
- Android ListView item中有按钮(Button)不能点击或者条目不能点击的问题
- android listview、GridView中item点击后改变其他item中的状态 setOnItemClickListener onItemClick
- android ListView常见问题解决方法(滚动背景变黑,去除滑动时阴影,拖动时Item图片不显示)
- Android中滑动ListView的黑色背景和点击ListView某个item的橙黄色背景怎么去掉
- 关于Android中ListView嵌套GridView的问题
- Android菜鸟练习第二十三课 ListView嵌套GridView,GridView中item无法点击