解决方案 »

  1.   

    监控GridView的Item的点击事件,然后先去掉当前gridview所有item的背景色,再给当前点击对象添加背景色
      

  2.   

    重写嵌套的gridview的adapter.getview()方法,利用viewholder来对所要点击的控件做onclick监听事件
      

  3.   

    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放在哪也没效果 ,咋回事呢
      

  4.   

    在if(selectedPosition==position){}加notifyDataSetChanged  试试看,可以不用那样做item事件呀,直接在GridViewAdapter .getview中做holder.textView的onclick事件呀
      

  5.   

    监控GridView的Item的点击事件,然后先去掉当前gridview所有item的背景色,再给当前点击对象添加背景色.
      

  6.   

    你要单独去写gridview,而且你确定点击到事件传到的是gridview
      

  7.   

    亲,你现在的效果是不是GridView可以滑动,但是没有点击效果,而且没报空指针?如果是请继续往下看。
    if (holder.gridView != null)  应该是  if (holder.gridView == null) 吧.