当前位置: 首页 > 知识库问答 >
问题:

OnClickListener无法处理ViewPager中GridView中的第一项

连俊智
2023-03-14

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

抱歉,由于我是新用户,不允许提交屏幕。。。

在< code > grid fragment # on activity created()内部:

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在GridView中的第一个项目不工作,并按照答案操作,但没有成功……

我哪里出错了?

共有1个答案

袁成化
2023-03-14

在问题编辑中回答。转换为社区wiki答案。查看当问题的答案添加到问题本身时,适当的操作是什么?)

《任择议定书》写道:

已经解决了。。。。

我在以下代码中添加了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());                                                                                              
            }
 类似资料:
  • 我在创建基于GridView的日历时遇到问题。下面是网格: 这应该是一个包含事件的日历,所以我让适配器实现OnClickListener,并为日历中的每个按钮设置侦听器。它适用于除第一个按钮(在本例中为30号)以外的每个按钮。当我单击它时,它就是不起作用,但当我在尝试单击第一个按钮后单击另一个按钮时,它会在单击另一按钮之前对第一个按钮执行单击。 我已经浏览了大约10页的相关问题,没有发现有人有这个

  • 我有GridView,其中项目是带有图像(ImageView)和标题(TextView)的视图。我想在这个ImageView上执行onClick操作,但不是在整个GridView项上。如果我使用这个代码: 只有第二次单击ImageView才能进行操作。如何通过第一次单击GridView在ImageView上执行操作?

  • 解释 最近,我一直在与碎片和viewpager进行大量的斗争。 我发现ViewPager可以保存你想要的任意多的片段。当它首次实例化时,根据类型(vsFragmentPagerAdapter和FragmentStatePagerAdapter之间的差异),它将创建所有片段或只创建“需要的”片段。 您可以看到,返回null,尽管您是在被触发后调用此方法的。 如果您决定将保留的上下文强制转换为活动,以

  • 在下面的代码中,如何避免处理的第一行? file1.csv是: 而file2.csv是: 我试图减去人和他/她的宠物的年龄,如果它出现在两个CSV中,但我得到以下错误,因为它也处理第一行:

  • 所以基本上我有一个动态添加和删除片段的浏览器。我要做的是在片段中设置onClick函数,并执行与该片段相关的操作。以下是我的代码。 MainFragment.java } 然后我在Fragment的xml中使用了OnClick属性,并在我的MainActivity中创建了一个函数,这也不起作用。 我错过了什么?

  • 是否可以在ViewPager中单击ListView的第一项? 如果像这样运行测试,第一项永远不会被单击。 是否有其他方法单击列表的第一项?