如何从适配器访问ListView

use*_*280 26 android android-listview android-adapter

我有ListView自己的适配器的自定义.我正在处理ButtonListView的项目中的点击,我希望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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*mir 65

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;
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*mod 8

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

public ViewPackagesAdapter(Activity mActivity, ListView cmgListView) {
        this.mActivity = mActivity;
        this.mListView=cmgListView;
    }
Run Code Online (Sandbox Code Playgroud)

现在通过mListView访问Activity的Listview ..