listview嵌套gridview点击让点击想对应的的gridview item变色 。急!! listviewgridview 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 监控GridView的Item的点击事件,然后先去掉当前gridview所有item的背景色,再给当前点击对象添加背景色 重写嵌套的gridview的adapter.getview()方法,利用viewholder来对所要点击的控件做onclick监听事件 public class MainActivity extends Activity { private ListView mListView; private ListViewAdapter mListViewAdapter; private ArrayList<ArrayList<HashMap<String, Object>>> mArrayList; private GridViewAdapter gridViewAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init() { mListView = (ListView) findViewById(R.id.listView); initData(); mListViewAdapter = new ListViewAdapter(mArrayList, MainActivity.this); mListView.setAdapter(mListViewAdapter); } private void initData() { mArrayList = new ArrayList<ArrayList<HashMap<String, Object>>>(); HashMap<String, Object> hashMap = null; ArrayList<HashMap<String, Object>> arrayListForEveryGridView; for (int i = 0; i < 10; i++) { arrayListForEveryGridView = new ArrayList<HashMap<String, Object>>(); for (int j = 0; j < 5; j++) { hashMap = new HashMap<String, Object>(); hashMap.put("content", "i=" + i + " ,j=" + j); arrayListForEveryGridView.add(hashMap); } mArrayList.add(arrayListForEveryGridView); } } public class ListViewAdapter extends BaseAdapter { private ArrayList<ArrayList<HashMap<String, Object>>> mList; private Context mContext; public ListViewAdapter(ArrayList<ArrayList<HashMap<String, Object>>> mList, Context mContext) { super(); this.mList = mList; this.mContext = mContext; } public int getCount() { if (mList == null) { return 0; } else { return this.mList.size(); } } public Object getItem(int position) { if (mList == null) { return null; } else { return this.mList.get(position); } } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder ; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(this.mContext).inflate( R.layout.listview_item, null, false); holder.imageView = (TextView) convertView .findViewById(R.id.listview_item_imageview); holder.gridView = (GridView) convertView .findViewById(R.id.listview_item_gridview); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.imageView.setText("加油"+position); if (holder.gridView != null) { ArrayList<HashMap<String, Object>> arrayListForEveryGridView = this.mList .get(position); gridViewAdapter = new GridViewAdapter(mContext, arrayListForEveryGridView); holder.gridView.setAdapter(gridViewAdapter); holder.gridView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { gridViewAdapter.clearSelection(position); gridViewAdapter.notifyDataSetChanged(); } }); } return convertView; } private class ViewHolder { TextView imageView; GridView gridView; } } public class GridViewAdapter extends BaseAdapter{ private Context mContext; private ArrayList<HashMap<String, Object>> mList; private int selectedPosition=0; public GridViewAdapter(Context mContext,ArrayList<HashMap<String, Object>> mList) { super(); this.mContext = mContext; this.mList = mList; } public int getCount() { if (mList == null) { return 0; } else { return this.mList.size(); } } public void clearSelection(int position) { selectedPosition = position; } public Object getItem(int position) { if (mList == null) { return null; } else { return this.mList.get(position); } } public long getItemId(int position) { return position; } 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.gridview_item, null, false); holder.textView = (TextView)convertView.findViewById(R.id.gridview_item_button); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.textView.setText(position+""); if(selectedPosition==position){ holder.textView.setTextColor(Color.parseColor("#ff6501")); }else{ holder.textView.setTextColor(Color.parseColor("#404040")); } return convertView; } private class ViewHolder { TextView textView; } } } 这是代码gridViewAdapter.notifyDataSetChanged(); 这方法没效果 listview的notifyDataSetChanged放在哪也没效果 ,咋回事呢 在if(selectedPosition==position){}加notifyDataSetChanged 试试看,可以不用那样做item事件呀,直接在GridViewAdapter .getview中做holder.textView的onclick事件呀 监控GridView的Item的点击事件,然后先去掉当前gridview所有item的背景色,再给当前点击对象添加背景色. 你要单独去写gridview,而且你确定点击到事件传到的是gridview 亲,你现在的效果是不是GridView可以滑动,但是没有点击效果,而且没报空指针?如果是请继续往下看。if (holder.gridView != null) 应该是 if (holder.gridView == null) 吧. Android下读取dev下的设备文件 .net上进行gzip的字符串,在android中解压缩。 怎么解决Location定位本地有误差 紧急求教安卓发送push信息 GPS获取城市名字问题~ 监听器的OnCheckedChangeListener方法无法重写,@Override编译错误 android 版本2.2 到1.5的转换 求助:为什么Android应用异常后会自动重启? android 微信分享问题 关于SQLite使用insert()增加数据的问题。 android创建数据库问题 关于安卓XML布局里面的引用与代码顺序
private ListView mListView;
private ListViewAdapter mListViewAdapter;
private ArrayList<ArrayList<HashMap<String, Object>>> mArrayList;
private GridViewAdapter gridViewAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
} private void init() {
mListView = (ListView) findViewById(R.id.listView);
initData();
mListViewAdapter = new ListViewAdapter(mArrayList, MainActivity.this);
mListView.setAdapter(mListViewAdapter);
} private void initData() {
mArrayList = new ArrayList<ArrayList<HashMap<String, Object>>>();
HashMap<String, Object> hashMap = null;
ArrayList<HashMap<String, Object>> arrayListForEveryGridView; for (int i = 0; i < 10; i++) {
arrayListForEveryGridView = new ArrayList<HashMap<String, Object>>();
for (int j = 0; j < 5; j++) {
hashMap = new HashMap<String, Object>();
hashMap.put("content", "i=" + i + " ,j=" + j);
arrayListForEveryGridView.add(hashMap);
}
mArrayList.add(arrayListForEveryGridView);
} }
public class ListViewAdapter extends BaseAdapter {
private ArrayList<ArrayList<HashMap<String, Object>>> mList;
private Context mContext;
public ListViewAdapter(ArrayList<ArrayList<HashMap<String, Object>>> mList,
Context mContext) {
super();
this.mList = mList;
this.mContext = mContext;
} public int getCount() {
if (mList == null) {
return 0;
} else {
return this.mList.size();
}
} public Object getItem(int position) {
if (mList == null) {
return null;
} else {
return this.mList.get(position);
}
} public long getItemId(int position) {
return position;
} public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder ;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(this.mContext).inflate(
R.layout.listview_item, null, false);
holder.imageView = (TextView) convertView
.findViewById(R.id.listview_item_imageview);
holder.gridView = (GridView) convertView
.findViewById(R.id.listview_item_gridview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.imageView.setText("加油"+position);
if (holder.gridView != null) {
ArrayList<HashMap<String, Object>> arrayListForEveryGridView = this.mList
.get(position);
gridViewAdapter = new GridViewAdapter(mContext,
arrayListForEveryGridView);
holder.gridView.setAdapter(gridViewAdapter);
holder.gridView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
gridViewAdapter.clearSelection(position);
gridViewAdapter.notifyDataSetChanged();
}
});
}
return convertView;
} private class ViewHolder {
TextView imageView;
GridView gridView;
}
}
public class GridViewAdapter extends BaseAdapter{
private Context mContext;
private ArrayList<HashMap<String, Object>> mList;
private int selectedPosition=0;
public GridViewAdapter(Context mContext,ArrayList<HashMap<String, Object>> mList) {
super();
this.mContext = mContext;
this.mList = mList;
}
public int getCount() {
if (mList == null) {
return 0;
} else {
return this.mList.size();
}
}
public void clearSelection(int position) {
selectedPosition = position;
}
public Object getItem(int position) {
if (mList == null) {
return null;
} else {
return this.mList.get(position);
}
}
public long getItemId(int position) {
return position;
}
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.gridview_item, null, false);
holder.textView = (TextView)convertView.findViewById(R.id.gridview_item_button);
convertView.setTag(holder); } else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(position+"");
if(selectedPosition==position){
holder.textView.setTextColor(Color.parseColor("#ff6501"));
}else{
holder.textView.setTextColor(Color.parseColor("#404040"));
}
return convertView;
} private class ViewHolder {
TextView textView;
}
} }
这是代码gridViewAdapter.notifyDataSetChanged(); 这方法没效果 listview的notifyDataSetChanged放在哪也没效果 ,咋回事呢
if (holder.gridView != null) 应该是 if (holder.gridView == null) 吧.