0

ViewPager 内には、テキストビューと画像を含む単一選択回答のグリッドを持つ gridview があります。回答をクリックすると、テキストビューの色が赤に変わり、それ以外の場合は白になります。最初のものを除く他のすべての回答に対しては正常に機能します。グリッドビューで最初の回答を最初にクリックしたとき、色は変わりません。2 回目のクリックで赤に変わりますが、オプションを変更すると、最初のオプションの赤の色が白に変わりません。下の画面を見て、

申し訳ありませんが、私は新しいユーザーであるため、画面の送信は許可されていません...

内部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 が GridView の最初の項目に対して機能せず、答えに従いますが、成功しませんでした...

どこが間違っているのですか?

4

1 に答える 1

0

質問編集で回答しました。コミュニティ wiki の回答に変換されました。質問への回答が質問自体に追加された場合の適切なアクションは何ですか? を参照してください。)

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());                                                                                              
            }
于 2015-02-08T18:47:49.230 に答える