Как я могу использовать мои глобальные переменные в пользовательском адаптере в Android? - PullRequest
0 голосов
/ 03 марта 2011

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

((GlobalVars)getApplicationContext())

, но это не компилируется, когда я пытаюсь получить к нему доступ в моем настраиваемом адаптере:

The method getApplicationContext() is undefined for the type FriendAdapter

Почему?Как я могу получить доступ к своим глобальным переменным в моем адаптере?

Спасибо


GlobalVars

public class GlobalVars extends Application {

    private ArrayList<String> selectFriendList = new ArrayList<String>();  

    public void addSelectedFriend(String fb_id) {
        this.selectFriendList.add(fb_id);       
    }

    public void removeSelectedFriend(String fb_id) {
        this.selectFriendList.remove(fb_id);        
    }

    public boolean isFriendSelected(String fb_id) {
        return this.selectFriendList.contains(fb_id);       
    }
}

FriendAdapter

public class FriendAdapter extends ArrayAdapter<Friend> implements OnClickListener {

    private ArrayList<Friend> items;   

    public FriendAdapter(Context context, int textViewResourceId,
            ArrayList<Friend> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.contact_row, null);
        }
        Friend f = items.get(position);
        if (f != null) {

            String name = f.name;
            TextView tt = (TextView) v.findViewById(R.id.contact_name);
            tt.setText(name);        

            CheckBox bCheck = (CheckBox) v.findViewById(R.id.checkbox);
            bCheck.setTag(f.fb_id);

            if (((GlobalVars)getApplicationContext()).isFriendSelected(f.fb_id))
                bCheck.setChecked(true);

            bCheck.setOnClickListener(this);

        }
        return v;
    }

    @Override
    public void onClick(View v) {
        ...
    } 

}

Ответы [ 2 ]

7 голосов
/ 03 марта 2011

Сохраняйте закрытую переменную-член, ссылающуюся на контекст внутри вашего класса Adapter:

private Context mContext;
private ArrayList<Friend> items;   

public FriendAdapter(Context context, int textViewResourceId,
        ArrayList<Friend> items) {
    super(context, textViewResourceId, items);
    this.items = items;
    this.mContext = context;
}

Затем получите дескриптор контекста вашего приложения из переменной context:

if (((GlobalVars) mContext.getApplicationContext()).isFriendSelected(f.fb_id))
            bCheck.setChecked(true);
0 голосов
/ 03 марта 2011

ArrayAdapter не является контекстом, поэтому вы не можете получить Application из этого класса. Но вы можете написать реализацию ArrayAdapter в Activity (это контекст). Примерно так, когда вы инициализируете адаптер:

    ArrayAdapter<String> A = new ArrayAdapter<String>(this, R.layout.item_view, 
                    new String[]{"1", "2"}){
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
//get view implementation                   
return convertView;
                }
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...