如何从适配器访问 ListView
Posted
技术标签:
【中文标题】如何从适配器访问 ListView【英文标题】:How do I access to ListView from the adapter 【发布时间】:2012-06-10 06:11:02 【问题描述】:我有一个自定义的ListView
和我自己的适配器。我正在处理我的ListView
项目中对Button
的点击,我希望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;
【问题讨论】:
我认为拥有适配器的全部意义在于将逻辑与 ListView 分离。 【参考方案1】:ViewGroup parent
持有对getView()
返回的View
的父级的引用,在您的情况下是您的自定义列表视图。
@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;
现在通过mListView访问Activity的Listview..
【讨论】:
【参考方案3】:在我的情况下,GridItemClickListner 出于某种原因没有工作。我使用这个
从适配器类访问Gridviewpublic 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”类。
【讨论】:
以上是关于如何从适配器访问 ListView的主要内容,如果未能解决你的问题,请参考以下文章
ListView:如何从外部以编程方式访问 Item 的元素?
从按钮 OnClick 方法中访问 listview/arrayadapter