如何从适配器中访问ListView

31

我有一个自定义的 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解耦。 - sudocoder
3个回答

70

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;
}

8

您可以通过适配器的构造函数传递您的Listview的引用,并将其存储在本地Listview变量中,而不是这样。您可以使用此方法访问您的Listviews方法。像这样:

public ViewPackagesAdapter(Activity mActivity, ListView cmgListView) {
        this.mActivity = mActivity;
        this.mListView=cmgListView;
    }

现在通过mListView访问Activity的Listview。

1
在我的情况下,GridItemClickListner由于某些原因没有起作用。我使用以下方式从Adapter类访问GridView: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"类。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接