OnClickListener不工作的第一个项目里面的GridView ViewPager [英] OnClickListener not working for first item in GridView inside ViewPager

查看:451
本文介绍了OnClickListener不工作的第一个项目里面的GridView ViewPager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

里面ViewPager,也有单项选择题的答案跟textviews和图像的网格一个gridview。当我在任何答案点击,TextView的应该改变其颜色为红色白别的。其工作罚款,但在第一个所有其他的答案。当我第一次点击的gridview的第一个答案,它不会改变颜色,在第二次点击它变成红色,但后来当我更改选项,红色不会更改为白色第一个选项。看看下面的屏幕,

对不起屏幕提交不允许我为我是一个新的用户...

GridFragment#OnActivityCreated()

  gridview.setOnItemClickListener(新OnItemClickListener(){        @覆盖
        公共无效onItemClick(适配器视图<>母公司,视图V,INT位置,长ARG3){            当前是=新TestTopics()getCuttentPage()。            电视=((ViewHolder)v.getTag())LBL。            如果(selectedValues​​.containsKey(当前页))
            {                selectedValues​​.get(当前页).setTextColor(Color.WHITE);
                selectedValues​​.remove(当前页);
                selectedValues​​.put(当前是,电视);
                selectedValues​​.get(当前页).setTextColor(Color.RED);            }
            其他
            {                selectedValues​​.put(当前是,电视);
                selectedValues​​.get(当前页).setTextColor(Color.RED);            }        }
    });

ImageAdapter#getView()方法:

 公共查看getView(INT位置,查看convertView,父母的ViewGroup){    numTopics = mTopicList.getNumTopics();
    ViewHolder持有人;
    持有人=新ViewHolder();    如果(convertView == NULL){       INT layoutId = R.layout.demo_pager_grid_item;
       LayoutInflater李=((活动)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(保持器);    }其他{        childView = convertView;
        支架=(ViewHolder)childView.getTag();
    }    如果(childView!= NULL){
       //设置子视图的宽度和高度。
       childView.setLayoutParams(新GridView.LayoutParams(mCellWidth,mCellHeight));       INT J =位置+ mImageOffset;       如果(J℃,)J = 0;
       如果(J> = numTopics)J = numTopics - 1;
       ImageView的=(ImageView的)childView.findViewById(R.id.image);
       如果(ImageView的!= NULL){
          资源解析度= 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(新的整数(J));
       }
       的TextView =(TextView中)childView.findViewById(R.id.title);       如果(TextView的!= NULL)
       {                textView.setText(mTopicList.getTopicTitle(J));
                textView.setTag(mTopicList.getTopicTitle(J));
                holder.lbl.setTag(mTopicList.getTopicTitle(J));
       }
    }    返回childView;}

我已经看到此链接:<一个href=\"http://stackoverflow.com/questions/11778228/onclicklistener-not-working-for-first-item-in-gridview\">OnClickListener不工作的GridView控件中第一个项目,然后按照答案,但没有得到它成功...

我要去哪里错了?


解决方案

在一个问题回答的编辑。转换为社区维基答案。见<一href=\"http://meta.stackoverflow.com/questions/267434/what-is-the-appropriate-action-when-the-answer-to-a-question-is-added-to-the-que\">What是当一个问题的答案将被添加到问题本身进行相应的操作?)

在OP写道:


  

已经解决了吧....


  
  

我添加 gridview.setBackgroundColor(Color.TRANSPARENT); 在我的下面code:

 如果(patternItems.containsKey(当前页)及和放大器; selectedValues​​.containsKey(当前页))
            {                selectedValues​​.get(当前页).setTextColor(Color.WHITE);
                selectedValues​​.remove(当前页);
                selectedValues​​.put(当前是,电视);
                selectedValues​​.get(当前页).setTextColor(Color.RED);
                ** gridview.setBackgroundColor(Color.TRANSPARENT)**
                patternItems.remove(当前页);
                patternItems.put(当前是,tv.getText()的toString());
             }
            其他
            {
                selectedValues​​.put(当前是,电视);
                selectedValues​​.get(当前页).setTextColor(Color.RED);
                ** gridview.setBackgroundColor(Color.TRANSPARENT)**
                patternItems.put(当前是,tv.getText()的toString());
            }


Inside ViewPager, there is a gridview which has a grid of single choice answers with textviews and images. When i clicked on any answer, the textview should change its color to RED else WHITE. Its working fine for all the other answers except the first one. When i first clicked on first answer in gridview, it doesn't change the color, on second click it turns to RED, but then when i change the option, the RED color doesn't change to WHITE for first option. Look at the screen below,

Sorry Screen submission is not allowed for me as i am a new user...

Inside 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() method:

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;

}

I have seen this link : OnClickListener not working for first item in GridView, and follow the answer, but didn't get succeed on it...

Where I'm going wrong?

解决方案

Answered in a question edit. Converted to a community wiki answer. See What is the appropriate action when the answer to a question is added to the question itself? )

The OP wrote:

have solved it....

I added gridview.setBackgroundColor(Color.TRANSPARENT); in my following code :

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());                                                                                              
            }

这篇关于OnClickListener不工作的第一个项目里面的GridView ViewPager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆