Как отключить элемент галереи? - PullRequest
0 голосов
/ 03 октября 2011

У меня есть галерея, где я реализовал собственный адаптер, расширяющий BaseAdapter. Для некоторых элементов я хочу, чтобы они были отключены, а также не активировались.

Переопределение метода isEnabled (int) не работает. Я все еще могу нажимать на отключенные элементы, а затем галерея центрирует этот элемент внутри него.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 18 мая 2012

Ниже приведен соответствующий исходный код виджета галереи

  public boolean onSingleTapUp(MotionEvent e) {

     if (mDownTouchPosition >= 0) {

         // An item tap should make it selected, so scroll to this child.
         scrollToChild(mDownTouchPosition - mFirstPosition);

         // Also pass the click so the client knows, if it wants to.
         if (mShouldCallbackOnUnselectedItemClick || mDownTouchPosition == mSelectedPosition) {
             performItemClick(mDownTouchView, mDownTouchPosition, mAdapter
                     .getItemId(mDownTouchPosition));
         }

         return true;
     }

     return false;
 }

Как вы можете видеть, галерея прокручивает дочерний элемент до того, как выполнить щелчок по нему. Таким образом, единственный способ действительно отключить элемент - это расширить Gallery и переопределить onSingleTapUp(MotionEvent e) в нем.

@Override
public boolean onSingleTapUp(MotionEvent e) {
    int itemPosition = pointToPosition((int) e.getX(), (int) e.getY());
    if (item at itemPosition is disabled) {
        // Do nothing.
        return true;
    }
    return super.onSingleTapUp(e);
}

Попробуй и дай мне знать.

0 голосов
/ 20 мая 2012

Попробуйте приведенный ниже код, где вы можете обработать событие щелчка для определенных позиций. Также вы можете отключить определенные элементы.

public class SplashActivity extends Activity{
    private Activity _activity;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Gallery g = new Gallery(this);
                g.setAdapter(new ImageAdapter(this));
                setContentView(g);
    }

    public class ImageAdapter extends BaseAdapter {
        int mGalleryItemBackground;
        private Context mContext;

        private Integer[] mImageIds = {
                R.drawable.menu1,
                R.drawable.menu2,
                R.drawable.menu3,
                R.drawable.menu4,
                R.drawable.menu1,
                R.drawable.menu2,
                R.drawable.menu3,
                R.drawable.menu4
        };

        public ImageAdapter(Context c) {
            mContext = c;

        }

        public int getCount() {
            return mImageIds.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

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

            ImageView i = new ImageView(mContext);

            i.setImageResource(mImageIds[position]);
            i.setLayoutParams(new Gallery.LayoutParams(150, 100));
            i.setScaleType(ImageView.ScaleType.FIT_XY);
            i.setBackgroundResource(mGalleryItemBackground);
            if(position!=0){
            i.setEnabled(false);
            i.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(SplashActivity.this, "" + position, Toast.LENGTH_SHORT).show();
                }
            });
            }
            return i;
        }
    }
}
...