【问题标题】:OnClickListener not working for first item in GridView inside ViewPagerOnClickListener 不适用于 ViewPager 内 GridView 中的第一项
【发布时间】:2015-02-09 03:28:28
【问题描述】:

在 ViewPager 中,有一个 gridview,它有一个带有文本视图和图像的单选答案网格。当我单击任何答案时,文本视图应将其颜色更改为红色,否则为白色。除了第一个之外,它对于所有其他答案都可以正常工作。当我第一次点击gridview中的第一个答案时,它不会改变颜色,第二次点击它会变成红色,但是当我改变选项时,第一个选项的红色不会变成白色。看下面的画面,

抱歉,我是新用户,不允许提交屏幕...

内部GridFragment#OnActivityCreated()

gridview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long arg3) {

            currentPage = new TestTopics().getCuttentPage();

            tv = ((ViewHolder) v.getTag()).lbl;                 

            if(selectedValues.containsKey(currentPage))
            {   

                selectedValues.get(currentPage).setTextColor(Color.WHITE);
                selectedValues.remove(currentPage);
                selectedValues.put(currentPage, tv);
                selectedValues.get(currentPage).setTextColor(Color.RED);



            }
            else
            {   

                selectedValues.put(currentPage, tv);
                selectedValues.get(currentPage).setTextColor(Color.RED);

            }               

        }
    });    

ImageAdapter#getView()方法:

public View getView(int position, View convertView, ViewGroup parent) {

    numTopics = mTopicList.getNumTopics ();
    ViewHolder holder;
    holder = new ViewHolder();

    if (convertView == null) { 

       int layoutId = R.layout.demo_pager_grid_item;
       LayoutInflater li =  ((Activity) mContext).getLayoutInflater();
       childView = li.inflate (layoutId, null);

       holder.img = (ImageView) childView.findViewById(R.id.image);
       holder.lbl = (TextView) childView.findViewById(R.id.title);

       childView.setTag(holder);

    } else {

        childView = convertView;
        holder = (ViewHolder) childView.getTag();
    }                

    if (childView != null) {
       // Set the width and height of the child view.
       childView.setLayoutParams(new GridView.LayoutParams(mCellWidth, mCellHeight));

       int j = position + mImageOffset;

       if (j < 0) j = 0;
       if (j >= numTopics) j = numTopics - 1;


       imageView = (ImageView) childView.findViewById (R.id.image);
       if (imageView != null) {
          Resources res = mContext.getResources ();
          int imagePadding = res.getDimensionPixelSize (R.dimen.grid_image_padding);

          imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
          imageView.setBackgroundResource (R.color.background_grid1_cell);
          imageView.setPadding (imagePadding, imagePadding, imagePadding, imagePadding);
          imageView.setImageBitmap (mTopicList.getTopicImage (j));
          imageView.setTag (new Integer (j));


       }
       textView = (TextView) childView.findViewById (R.id.title);

       if (textView != null) 
       {           

                textView.setText(mTopicList.getTopicTitle (j)); 
                textView.setTag (mTopicList.getTopicTitle (j));
                holder.lbl.setTag(mTopicList.getTopicTitle (j));


       }
    }



    return childView;

}

我已经看到这个链接:OnClickListener not working for first item in GridView,并按照答案,但没有成功...

我哪里出错了?

【问题讨论】:

  • 是的,我附上了更新的代码。请参考解决方案。
  • 谢谢,我去看看!
  • 不好编辑问题添加解决方案;而是将解决方案作为您自己的答案发布并接受它,这样人们就可以看到它已解决,您也会得到一些积分:)
  • 明白了,Adinia,下次会处理这个问题。

标签: android-layout


【解决方案1】:

在问题编辑中回答。转换为社区 wiki 答案。见What is the appropriate action when the answer to a question is added to the question itself?)

OP 写道:

已经解决了……

我在以下代码中添加了gridview.setBackgroundColor(Color.TRANSPARENT);

if(patternItems.containsKey(currentPage) && selectedValues.containsKey(currentPage))
            {

                selectedValues.get(currentPage).setTextColor(Color.WHITE);
                selectedValues.remove(currentPage);
                selectedValues.put(currentPage, tv);
                selectedValues.get(currentPage).setTextColor(Color.RED);
                **gridview.setBackgroundColor(Color.TRANSPARENT);**
                patternItems.remove(currentPage);                       
                patternItems.put(currentPage,tv.getText().toString());
             }
            else
            {   
                selectedValues.put(currentPage, tv);
                selectedValues.get(currentPage).setTextColor(Color.RED);
                **gridview.setBackgroundColor(Color.TRANSPARENT);**
                patternItems.put(currentPage,tv.getText().toString());                                                                                              
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多