Android: доступ ко всем флажкам в событии onclick флажка в пользовательском адаптере - PullRequest
0 голосов
/ 08 марта 2011

как я могу получить доступ ко всем флажкам в моем просмотре списка из события onclick данного флажка. Чего я хочу добиться, так это отключить все непроверенные флажки, если число отмеченных флажков больше заданного числа.

Спасибо тебе!

public class FriendAdapter extends SimpleCursorAdapter implements OnClickListener {

    private Context mContext;
    private int mLayout;
    private Cursor mCursor;
    private int mNameIndex;
    private int mIdIndex;
    private LayoutInflater mLayoutInflater; 
    private final ImageDownloader imageDownloader = new ImageDownloader();  

    private final class ViewHolder {
        public TextView name;
        public ImageView image;
        public CheckBox checkBox;
    }

    public FriendAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);

        this.mContext = context;
        this.mLayout = layout;
        this.mCursor = c;
        this.mNameIndex = mCursor.getColumnIndex(WhipemDBAdapter.KEY_NAME);
        this.mIdIndex = mCursor.getColumnIndex(WhipemDBAdapter.KEY_FB_ID);
        this.mLayoutInflater = LayoutInflater.from(context);        
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (mCursor.moveToPosition(position)) {
            ViewHolder viewHolder;

            if (convertView == null) {
                convertView = mLayoutInflater.inflate(mLayout, null);

                viewHolder = new ViewHolder();
                viewHolder.name = (TextView) convertView.findViewById(R.id.contact_name);
                viewHolder.image = (ImageView) convertView.findViewById(R.id.contact_pic);
                viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
                viewHolder.checkBox.setOnClickListener(this);

                convertView.setTag(viewHolder);
            }
            else {
                viewHolder = (ViewHolder) convertView.getTag();
            }

            String name = mCursor.getString(mNameIndex);
            String fb_id = mCursor.getString(mIdIndex);         
            boolean isChecked = ((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id);

            viewHolder.name.setText(name);
            imageDownloader.download("http://graph.facebook.com/"+fb_id+"/picture", viewHolder.image);

            viewHolder.checkBox.setTag(fb_id);
            viewHolder.checkBox.setChecked(isChecked);
        }

        return convertView;
    }

    @Override
    public void onClick(View v) {

        CheckBox cBox = (CheckBox) v;
        String fb_id = (String) cBox.getTag();

        /* 
            How can I access all the checkboxes here?
        */

        if (cBox.isChecked()) {
            if (!((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
                ((GlobalVars) mContext.getApplicationContext()).addSelectedFriend(fb_id);
        } else {
            if (((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
                ((GlobalVars) mContext.getApplicationContext()).removeSelectedFriend(fb_id);
        }

    }
}

Ответы [ 2 ]

0 голосов
/ 15 декабря 2012

Я думаю, что вы можете сделать это, получив глобальную ссылку на представление в методе getView.

так должно быть что-то вроде этого:

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

//all other stuff
}

После этого, предположив, что корневым представлением строки ListView является RelativeLayout, вы можете попробовать использовать этот код в методе onClick:

RelativeLayout rowRootView=(RelativeLayout)myRow.getRootView();
for(int i=0;i<rowRootView.getChildCount();i++){
    if(rowRootView.getChildAt(i).getClass()==CheckBox.class){
        //do your stuff
    }
}

Может быть, это должно работать и с этим кодом

 @Override
    public void onClick(View v) {
        RelativeLayout rowRootView=(RelativeLayout)v.getRootView();
        for(int i=0;i<rowRootView.getChildCount();i++){
        if(rowRootView.getChildAt(i).getClass()==CheckBox.class){
        //do your stuff
        }
         }
    }

надеюсь, что это поможет

0 голосов
/ 09 марта 2011

Прежде всего используйте onCheckChangedListener вместо onClickListener.Сохраните глобальный счетчик для числа проверенных друзей и установите его значение в самом конструкторе.Далее в методе onCheckedChanged увеличивается или уменьшается счетчик в зависимости от того, установлен флажок или нет.Если счетчик становится больше, чем ваш счетчик, то аннулируйте просмотр списка и в методе getview установите видимость флажка как невидимую (или пропавшую)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...