Как получить доступ к ListView из адаптера
У меня есть пользовательский ListView
с моим собственным адаптером. Я обрабатываю щелчок на Button
в элементе ListView
, и я хочу, чтобы ListView
стал невидимым в этом клике.
Я понятия не имею, как получить доступ к ListView
из адаптера.
public class ScheduleArrayAdapter extends ArrayAdapter<ScheduleListItem> {
/*...*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(id, null);
}
final ScheduleListItem o = items.get(position);
if (o != null) {
/*...*/
Button details=(Button)v.findViewById(R.id.btn_details);
details.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//HOW TO MAKE (R.id.lv_schedule) TO BECOME INVISIBLE HERE?
}
});
}
return v;
}
}
Ответы
Ответ 1
ViewGroup parent
содержит ссылку на родительский элемент View
, возвращаемый getView()
, который в вашем случае является вашим пользовательским списком просмотров.
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
...
details.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
parent.setVisibility(View.INVISIBLE); // or View.GONE
}
});
...
return v;
}
Ответ 2
Вместо этого вы можете передать ссылку на свой конструктор Listview через конструктор адаптера и сохранить его в локальной переменной Listview. Вы можете использовать это для доступа к вашему методу Listviews. Подобно этому
public ViewPackagesAdapter(Activity mActivity, ListView cmgListView) {
this.mActivity = mActivity;
this.mListView=cmgListView;
}
Теперь перейдите в список Activity List через mListView..
Ответ 3
В моем случае GridItemClickListner по какой-то причине не работал. Я обращаюсь к Gridview из класса адаптера, используя этот
public View getView(final int position, View convertView, ViewGroup parent) {
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((ClockGridView) v.getParent()).performItemClick(v, position, v.getId());
(OR)
((ClockGridView)parent).performItemClick(v, position, v.getId());
}
});
}
"ClockGridView", который расширяет класс "GridView".